Zoeken…
Opmerkingen
U moet ervoor zorgen dat u elke keer dat u een UTF-8-string verwerkt, dit veilig doet. Dit is helaas het moeilijkste gedeelte. U zult waarschijnlijk uitgebreid gebruik willen maken van de
mbstring
extensie van PHP.PHP de ingebouwde string operaties zijn niet standaard UTF-8 safe. Er zijn enkele dingen die u veilig kunt doen met normale PHP-stringbewerkingen (zoals aaneenschakeling), maar voor de meeste dingen moet u de equivalente
mbstring
functie gebruiken.
Invoer
U moet elke ontvangen string verifiëren als geldige UTF-8 voordat u deze probeert op te slaan of ergens te gebruiken. PHP's
mb_check_encoding()
, maar je moet het consistent gebruiken. Dit kan echt niet worden omzeild, omdat kwaadwillende clients gegevens kunnen verzenden in elke gewenste codering.$string = $_REQUEST['user_comment']; if (!mb_check_encoding($string, 'UTF-8')) { // the string is not UTF-8, so re-encode it. $actualEncoding = mb_detect_encoding($string); $string = mb_convert_encoding($string, 'UTF-8', $actualEncoding); }
Als u HTML5 gebruikt, kunt u dit laatste punt negeren. U wilt dat alle gegevens die browsers u sturen, zich in UTF-8 bevinden. De enige betrouwbare manier om dit te doen, is door het kenmerk
accept-charset
toe te voegen aan al uw<form>
-tags:<form action="somepage.php" accept-charset="UTF-8">
uitgang
Als uw toepassing tekst naar andere systemen verzendt, moeten deze ook worden geïnformeerd over de tekencodering. In PHP kunt u de optie
default_charset
inphp.ini
of zelf deContent-Type
MIME-header uitgeven. Dit is de voorkeursmethode bij het targeten van moderne browsers.header('Content-Type: text/html; charset=utf-8');
Als u de antwoordkoppen niet kunt instellen, kunt u de codering ook instellen in een HTML-document met HTML-metagegevens .
HTML5
<meta charset="utf-8">
Oudere versies van HTML
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Gegevensopslag en toegang
Dit onderwerp gaat specifiek over UTF-8 en overwegingen voor het gebruik ervan met een database. Als u meer informatie wilt over het gebruik van databases in PHP, bekijk dan dit onderwerp .
Gegevens opslaan in een MySQL-database:
- Geef de
utf8mb4
op voor alle tabellen en tekstkolommen in uw database. Dit maakt dat MySQL fysiek gecodeerde waarden in UTF-8 opslaat en ophaalt.MySQL zal impliciet
utf8mb4
codering gebruiken als eenutf8mb4_*
is opgegeven (zonder expliciete tekenset). - Oudere versies van MySQL (<5.5.3) ondersteunen
utf8mb4
dus u zult gedwongen moeten wordenutf8
te gebruiken, dat alleen een subset van Unicode-tekens ondersteunt.
Toegang krijgen tot gegevens in een MySQL-database:
In uw toepassingscode (bijv. PHP), in welke DB-toegangsmethode u ook gebruikt, moet u de verbindingskarakteristiek instellen op
utf8mb4
. Op deze manier kan MySQL geen conversie uitvoeren van de native UTF-8 wanneer het gegevens doorgeeft aan uw toepassing en vice versa.Sommige stuurprogramma's bieden hun eigen mechanisme voor het configureren van de verbindingstekenset, die zowel zijn eigen interne status bijwerkt als MySQL informeert over de codering die voor de verbinding moet worden gebruikt. Dit is meestal de voorkeursbenadering.
Bijvoorbeeld (dezelfde overweging met betrekking tot
utf8mb4
/utf8
toepassing als hierboven):Als u de BOB- abstractielaag gebruikt met PHP ≥ 5.3.6, kunt u
charset
opgeven in de DSN :$handle = new PDO('mysql:charset=utf8mb4');
Als u mysqli gebruikt , kunt u
set_charset()
aanroepen:$conn = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db'); $conn->set_charset('utf8mb4'); // object oriented style mysqli_set_charset($conn, 'utf8mb4'); // procedural style
Als je vastzit aan gewone mysql maar toevallig PHP ≥ 5.2.3 draait, kun je
mysql_set_charset
bellen.$conn = mysql_connect('localhost', 'my_user', 'my_password'); $conn->set_charset('utf8mb4'); // object oriented style mysql_set_charset($conn, 'utf8mb4'); // procedural style
Als het databasestuurprogramma geen eigen mechanisme biedt voor het instellen van de verbindingstekenset, moet u mogelijk een query uitvoeren om MySQL te vertellen hoe uw toepassing verwacht dat gegevens over de verbinding worden gecodeerd:
SET NAMES 'utf8mb4'
.