Wenn Sie PHP verwenden, um mit MySQL für Datenbanken zu interagieren, stoßen Sie häufig auf Zeichen codierende Probleme, insbesondere wenn Sie chinesische oder andere Sonderzeichen ausgeben. Die MySQLi :: Get_Charset -Funktion selbst ist ein Zeichensatz, das verwendet wird, um die Datenbankverbindung zu erhalten, aber manchmal, selbst wenn diese Funktion verwendet wird, erscheint der Ausgabeinhalt immer noch verstümmelt. Warum passiert das? In diesem Artikel werden die relevanten Gründe für Sie analysiert und gemeinsame Schritte zur Fehlerbehebung liefern.
In PHP ist MySQLI :: get_charset eine sehr nützliche Funktion, mit der der Zeichensatz von der aktuellen Datenbankverbindung verwendet werden kann. Sein Rückgabewert ist ein Objekt, das die Zeichensatzinformationen der aktuellen Verbindung enthält. Verwenden Sie beispielsweise den folgenden Code:
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
// Holen Sie sich den Charaktersatz der aktuell verbundenen Angeschlossenen
$charset = $mysqli->get_charset();
echo "Der aktuelle Zeichensatz ist: " . $charset->charset;
Dieser Code gibt die Zeichensatzinformationen der aktuell verbundenen Ausgabe aus, die normalerweise UTF8 oder UTF8MB4 usw. sind.
Trotz der Verwendung des richtigen Zeichensatzes für die Datenbankverbindung können wir immer noch mit verstümmelten Problemen stoßen. Dies hängt normalerweise mit anderen Faktoren zusammen, und wir werden nachstehend eine detaillierte Untersuchung durchführen.
Selbst wenn Sie den richtigen Zeichen festlegen, wenn Sie eine Verbindung zu MySQL in PHP herstellen, kann der Zeichensatz der Datenbank oder Tabelle möglicherweise nicht auf die richtige Codierung festgelegt werden. Zu diesem Zeitpunkt kann MySQL, selbst wenn die PHP -Seite die korrekte Zeichenkodierung sendet, möglicherweise in der falschen Codierung gespeichert, was zu verstümmelten Code führt.
Fehlerbehebung Methode:
Verwenden Sie die Datenbank Create Create Create und zeigen Sie die Tabelle erstellen, um die Zeichensatzeinstellungen von Datenbanken und Tabellen anzuzeigen.
Zum Beispiel:
SHOW CREATE DATABASE database_name;
SHOW CREATE TABLE table_name;
Wenn Sie feststellen, dass der Zeichensatz nicht UTF8 oder UTF8MB4 ist, können Sie ihn durch die folgende SQL -Anweisung ändern:
ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Wenn PHP eine Verbindung zu MySQL herstellt, obwohl der Zeichensatz mit MySQLi :: get_charset bestätigt wird, wird die tatsächliche Verbindung möglicherweise nicht auf den richtigen Zeichensatz gesetzt. Der Zeichensatz kann mit der Funktion set_charset explizit eingestellt werden.
Fehlerbehebung Methode:
Setzen Sie nach der Erstellung einer Datenbankverbindung explizit den Zeichensatz:
$mysqli->set_charset("utf8mb4");
Dieser Code erzwingt die aktuelle Verbindung, um den UTF8MB4 -Zeichensatz zu verwenden, wodurch das Problem der inkonsistenten Codierung vermieden wird.
Zusätzlich zu den Zeichensatzeinstellungen für Datenbankverbindungen muss auch der Ausgangszeichen der Seite korrekt eingestellt werden. Insbesondere die Ausgabe von HTML vom Typ Inhalt , wenn nicht korrekt eingestellt ist, kann der Browser möglicherweise nicht korrekt Zeichen auf der Seite analysieren.
Fehlerbehebung Methode:
Stellen Sie auf der HTML -Seite sicher, dass Sie das richtige Meta -Tag enthalten:
<meta charset="UTF-8">
Dadurch wird der Browser mitgeteilt, dass er den Seiteninhalt in der UTF-8-Codierung analysieren soll, wodurch verstümmelte Code vermieden wird.
Wenn Sie Daten aus einer Datei lesen und sie in eine Datenbank einfügen, kann die Codierung der Datei mit dem Datenbank -Zeichensatz nicht übereinstimmen, was auch zu verstopften Code führen kann. Stellen Sie vor dem Einfügen von Daten sicher, dass die Datei selbst korrekt codiert ist.
Fehlerbehebung Methode:
Verwenden Sie die Funktion MB_DETECT_ENCODING , um die Codierung der Datei zu überprüfen:
$file_contents = file_get_contents('data.txt');
$encoding = mb_detect_encoding($file_contents, 'UTF-8, ISO-8859-1, GBK');
echo $encoding;
Wenn die Datei nicht korrekt codiert, können Sie die Funktion MB_CONVERT_ENCODING zum Konvertieren verwenden:
$file_contents = mb_convert_encoding($file_contents, 'UTF-8', 'GBK');
In einigen Fällen können verstümmelte Probleme auftreten, wenn Sie bei der Verbindung mit der Datenbank einen Zeichensatz festgelegt haben, wenn der Standardzeichensatz der Datenbank andere Zeichensätze wie Latin1 ist. Konsistenz kann durch Einstellen des Standardzeichens für MySQL sichergestellt werden.
Fehlerbehebung Methode:
Überprüfen Sie die Charakter -Set -Einstellungen in My.cnf oder My.ini -Konfigurationsdateien und verwenden Sie UTF8MB4 oder UTF8 .
Fügen Sie beispielsweise die folgende Konfiguration hinzu:
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
Auch wenn die MySQLI :: Get_Charset -Funktion verwendet wird, können Sie immer noch auf verstümmelte Probleme stoßen. Dies wird normalerweise durch inkonsistente Zeichensatzeinstellungen für Datenbank, Tabelle, Seitenausgabe oder Dateien verursacht. Diese verstümmelten Probleme können gelöst werden, indem nach und nach Faktoren wie Datenbankzeichensätze, Verbindungszeichensätze, Seitenausgabe -Zeichensätze und Dateicodierung geprüft werden.
Ich hoffe, dass durch die Schritte zur Fehlerbehebung in diesem Artikel Ihnen das Problem der verstümmelten Probleme schnell lokalisiert und lösen kann. Wenn Sie während des Fehlerbehebungsprozesses auf andere Probleme stoßen, können Sie sich gerne weiter besprechen.