Charaktercodierungsprobleme werden bei der Entwicklung mehrsprachiger Websites oder Anwendungen häufig zu Kopfschmerzen. Insbesondere wenn der Charakter zwischen der Datenbank und dem PHP -Programm inkonsistent ist, ist es sehr einfach, Probleme wie chinesische Zeichen verstümmelt und in Sonderzeichen anzuzeigen. Obwohl PHP mehrere Mittel zur Steuerung der Zeichensatzeinstellungen bietet, können Sie eine sehr praktische Funktion in der Mbtring -Erweiterung - mb_get_info () ignorieren.
In diesem Artikel wird vorgestellt, wie die Funktion mb_get_info () verwendet wird, um die Multibyte -Zeichencodierung zu überprüfen, die derzeit von PHP verwendet wird, und mit den Datenbankeinstellungen zu vergleichen, um festzustellen, ob die beiden konsistent sind.
mb_get_info () ist eine Funktion in der Php Multibyte String -Erweiterung (MBString), um die relevanten Einstellungsinformationen des aktuellen Mbstring zurückzugeben.
mb_get_info(string $type = null): string|array
Wenn keine Parameter übergeben werden, wird ein Array, das alle relevanten Einstellungsinformationen enthält, zurückgegeben.
Durch die Übergabe von Parametern wie "interne_encoding" kann die aktuelle interne Codierung erfolgen.
Unter der Annahme, dass Sie die Codierung auf UTF8MB4 festlegen, wenn Sie eine Verbindung zur Datenbank herstellen, können wir bestätigen, ob die Multibyte -String -Einstellungen von PHP in den folgenden Schritten konsistent sind.
$mysqli = new mysqli('localhost', 'user', 'password', 'my_database');
$mysqli->set_charset('utf8mb4');
Stellen Sie sicher, dass der Zeichensatz der Datenbankverbindung auf die gewünschte Zielcodierung festgelegt ist, z. B. UTF8MB4 .
$mbInfo = mb_get_info();
echo "aktuell mbstring Interne Codierung: " . $mbInfo['internal_encoding'] . PHP_EOL;
Oder eine prägnantere Art des Schreibens:
echo "aktuell mbstring Codierung: " . mb_get_info("internal_encoding") . PHP_EOL;
Standardmäßig kann die interne Codierung von Mbstring UTF-8 sein, aber Sie sollten sie ausdrücklich festlegen, um Inkonsistenzen zu verhindern:
mb_internal_encoding("UTF-8");
Der vollständige Erkennungscode lautet wie folgt:
<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'my_database');
$mysqli->set_charset('utf8mb4');
mb_internal_encoding("UTF-8");
$dbCharset = $mysqli->character_set_name(); // Holen Sie sich den Zeichensatz für Datenbankverbindungen
$phpCharset = mb_get_info("internal_encoding"); // Erhalten PHP Zeichensatz
if (strcasecmp($dbCharset, $phpCharset) === 0 || stripos($dbCharset, $phpCharset) !== false) {
echo "? Datenbankzeichensatz und PHP von mbstring Codierung一致:$dbCharset" . PHP_EOL;
} else {
echo "? Inkonsistent!数据库使用von是 $dbCharset,PHP mbstring 使用von是 $phpCharset" . PHP_EOL;
}
?>
Setzen Sie immer die Standardcodierung : Setzen Sie MB_Internal_encoding () einheitlich, wenn das Projekt initialisiert wird, z. B. in die Eingabedatei eingeben.
Überprüfen Sie, ob die Mbtring -Erweiterung aktiviert ist :
if (!extension_loaded('mbstring')) {
die("mbstring Erweiterung nicht aktiviert,Bitte php.ini Offen!");
}
Führen Sie die Front-End-Konsistenz bei : Front-End-HTML-Seiten sollten auch konsistente Zeichensätze deklarieren, wie z. B.:
<meta charset="UTF-8">
Obwohl mb_get_info () selbst nicht direkt auf die Einstellungen für Datenbankzeichen zugreift, bietet es ein Fenster, um die Umgebung von PHP Multibyte String zu beobachten. Durch den Vergleich seiner Ergebnisse mit dem mit der Datenbank verbundenen Zeichensatz können Sie inkonsistenten Codierungen leichter beheben. Hören Sie auf, den Charakter -Set -Probleme Ihren Entwicklungsprozess zu stören. Überprüfen Sie es im Voraus und holen Sie sich das doppelt so hoch wie die halbe Anstrengung!
Weitere Codierungsfähigkeiten finden Sie unter: https://gitbox.net/php/encoding-guide