Heim >Backend-Entwicklung >PHP-Tutorial >Wie löse ich verstümmelten chinesischen PHP-Code? Einführung in drei Situationen verstümmelter chinesischer Zeichen in PHP
Verstümmelte PHP-Zeichen sind ein Problem, das häufig bei der PHP-Entwicklung auftritt. Beispielsweise treten verstümmelte PHP-Zeichen manchmal auf der Webseite selbst auf, einige treten während der Interaktion mit MySQL auf und manchmal hängen sie mit dem Betriebssystem zusammen . Wie kann man also den verstümmelten chinesischen Code in PHP lösen? Schauen wir uns als Nächstes diese drei Situationen im Detail an.
Empfohlenes Handbuch : php vollständiges Handbuch zum Selbststudium
1. Die erste ist die Kodierung der PHP-Webseite
1 Die Kodierung der PHP-Datei selbst und die Kodierung der Webseite sollten
a gb2312-Kodierung, dann muss PHP den Header ausgeben: header( "Content-Type: text/html; charset=gb2312"), fügen Sie f5b8d47c708454ec3cc1acb6ba75afb3 auf die statische Seite und das Kodierungsformat aller Dateien ANSI ist, können Sie es mit Notepad öffnen, speichern unter und die Kodierung als ANSI auswählen und die Quelldatei überschreiben.
b. Wenn Sie die UTF-8-Codierung verwenden möchten, sollte PHP den Header ausgeben: header("Content-Type: text/html; charset=utf-8") und 3083d008d8ab4c07b2b71f91846a2c47, das Codierungsformat aller Dateien ist utf-8. Das Speichern als UTF-8 kann etwas mühsam sein. Wenn Sie Session verwenden, können Sie Editplus zum Speichern verwenden. Parameterauswahl->Datei-> UTF-8-Signatur, wählen Sie Immer löschen und speichern Sie dann, um die Stücklisteninformationen zu entfernen.
2. PHP selbst ist kein Unicode, alle Funktionen wie substr müssen in mb_substr geändert werden (mbstring-Erweiterung muss installiert werden); oder iconv kann zum Transkodieren verwendet werden.
2. Dateninteraktion zwischen PHP und MySQL
Die Kodierung von PHP und der Datenbank sollte konsistent sein
1 Ändern Sie die MySQL-Konfigurationsdatei my.ini oder my.cnf Verwenden Sie die utf8-Kodierung für MySQL
[mysql] default-character-set=utf8 [mysqld] default-character-set=utf8 default-storage-engine=MyISAM 在[mysqld]下加入: default-collation=utf8_bin init_connect='SET NAMES utf8'
2. Fügen Sie mysql_query("set-Namen vor dem PHP-Programm hinzu, das Datenbankoperationen ausführen muss 'Encoding'");, die Codierung stimmt mit der PHP-Codierung überein. Wenn die PHP-Codierung gb2312 ist, dann ist die MySQL-Codierung gb2312. Wenn es utf-8 ist, dann ist die MySQL-Codierung utf8, damit beim Einfügen oder Abrufen von Daten keine verstümmelten Zeichen auftreten
3. PHP hängt mit dem Betriebssystem zusammen
Die Codierung von Windows und Linux ist unterschiedlich. Wenn in der Windows-Umgebung die Parameter utf-8-codiert sind, treten Fehler auf, z move_uploaded_file(), filesize(), readfile() usw. Diese Funktionen werden häufig beim Verarbeiten von Uploads und Downloads verwendet. Beim Aufruf kann Folgendes auftreten. Der obige Fehler:
Warning: move_uploaded_file()[function.move-uploaded-file]:failed to open stream: Invalid argument in ... Warning: move_uploaded_file()[function.move-uploaded-file]:Unable to move '' to '' in ... Warning: filesize() [function.filesize]: stat failed for ... in ... Warning: readfile() [function.readfile]: failed to open stream: Invalid argument in ..
Obwohl diese Fehler bei Verwendung der gb2312-Kodierung in einer Linux-Umgebung nicht auftreten, wird der gespeicherte Dateiname verstümmelt und die Datei kann nicht gelesen werden Zuerst den Betriebssystemerkennungseditor Bei der Code-Kodierungskonvertierung kann mb_convert_encoding (Zeichenfolge, neue Kodierung, ursprüngliche Kodierung) oder iconv (ursprüngliche Kodierung, neue Kodierung, Zeichenfolge) verwendet werden, sodass der Dateiname nach der Verarbeitung gespeichert wird Es gibt keine verstümmelten Zeichen, Dateien können normal gelesen werden und Dateien mit chinesischen Namen können hoch- und heruntergeladen werden.
Tatsächlich gibt es eine bessere Lösung, die vollständig vom System getrennt ist und keine Notwendigkeit besteht, die Codierung des Systems zu berücksichtigen. Sie können als Dateinamen eine Folge nur aus Buchstaben und Zahlen generieren und den ursprünglichen Namen mit chinesischen Zeichen speichern In der Datenbank tritt beim Aufruf von move_uploaded_file() kein Problem auf. Beim Herunterladen müssen Sie lediglich den Dateinamen in den ursprünglichen Namen mit chinesischen Zeichen ändern.
Der Code zum Implementieren des Herunterladens lautet wie folgt:
header("Pragma: public"); header("Expires: 0"); header("Cache-Component: must-revalidate, post-check=0, pre-check=0"); header("Content-type: $file_type"); header("Content-Length: $file_size"); header("Content-Disposition: attachment; filename=\"$file_name\""); header("Content-Transfer-Encoding: binary"); readfile($file_path);
$file_type ist der Dateityp, $file_name ist der ursprüngliche Name und $file_path ist die Adresse der im Dienst gespeicherten Datei.
4. Fassen wir zusammen, warum verstümmelte Zeichen erscheinen
Im Allgemeinen gibt es zwei Gründe für das Erscheinen verstümmelter Zeichen. Der erste ist auf die Codierung (Zeichensatz) zurückzuführen. Die Einstellungen sind falsch, was dazu führt, dass der Browser mit der falschen Codierung analysiert, was zu einem unordentlichen „himmlischen Buch“ führt, das den Bildschirm ausfüllt. Zweitens wird die Datei mit der falschen Codierung geöffnet und dann ursprünglich gespeichert Es ist in GB2312 kodiert, wird aber in UTF-8-Kodierung geöffnet und gespeichert. Um das oben genannte Problem mit verstümmeltem Code zu lösen, müssen Sie zunächst wissen, welche Aspekte der Entwicklung eine Codierung beinhalten:
1. Dateicodierung:
bezieht sich auf die Auslagerungsdatei (.html, .php usw.). .) selbst. Welche Codierung zum Speichern verwendet wird.
Notizblock und Dreamweaver Die Dateikodierung wird beim Öffnen der Seite automatisch erkannt, sodass es zu keinen Problemen kommt. Allerdings erkennt ZendStudio die Kodierung nicht automatisch. Es öffnet die Datei nur in einer bestimmten Kodierung, basierend auf der Konfiguration der Einstellungen. Ich habe die Datei während der Arbeit versehentlich mit der falschen Kodierung geöffnet, und nachdem ich die Änderungen vorgenommen hatte, erschienen beim Speichern sofort verstümmelte Zeichen (das weiß ich sehr gut).
2. Kodierung der Seitendeklaration:
Im HTML-Code HEAD können Sie 1c95cfb7a0804dfc3928d6b29f69f4a1 Um dem Browser mitzuteilen, welche Codierung für die Webseite verwendet wird, verwendet XXX derzeit hauptsächlich GB2312 und UTF-8 bei der Entwicklung chinesischer Websites.
3. Datenbankverbindungskodierung:
bezieht sich darauf, welche Codierung zum Übertragen von Daten an die Datenbank bei der Durchführung von Datenbankoperationen verwendet wird. Hierbei ist zu beachten, dass diese nicht mit der Codierung der Datenbank selbst verwechselt wird, beispielsweise mit der internen Standardeinstellung von MySQL
Es handelt sich um eine Latin1-Codierung, was bedeutet, dass MySQL Daten in Latin1-Codierung speichert und Daten, die in anderen Codierungen an MySQL übertragen werden, in Latin1-Codierung konvertiert werden.
Wenn Sie wissen, wo die Codierung bei der WEB-Entwicklung eine Rolle spielt, kennen Sie auch die Ursache für verstümmelte Codes: Die oben genannten drei Codierungseinstellungen sind inkonsistent, da die meisten verschiedenen Codierungen ASCII-kompatibel sind. Es erscheint nicht und Chinesisch hat kein Glück.
5. Bekämpfen Sie einige häufige Fehlersituationen und Lösungen:
1 Die Datenbank verwendet UTF8-Kodierung und die Seitendeklarationskodierung ist GB2312 , was die häufigste Ursache für verstümmelte Zeichen ist.
Wenn Sie zu diesem Zeitpunkt die Daten im PHP-Skript direkt AUSWÄHLEN, werden die Daten verstümmelt. Sie müssen sie vor der Abfrage verwenden: mysql_query("SET NAMES GBK"); um die MYSQL-Verbindungskodierung festzulegen und sicherzustellen, dass die Seitendeklarationskodierung mit der hier festgelegten Verbindungskodierung übereinstimmt (GBK ist eine Erweiterung von GB2312 ).
Wenn die Seite UTF-8-codiert ist, können Sie Folgendes verwenden: mysql_query("SET NAMES UTF8");
Beachten Sie, dass es sich um UTF8 anstelle des häufig verwendeten UTF-8 handelt.
Wenn die auf der Seite deklarierte Kodierung mit der internen Kodierung der Datenbank übereinstimmt, müssen Sie die Verbindungskodierung nicht festlegen.
Hinweis:
Tatsächlich ist die Dateneingabe und -ausgabe von MYSQL komplizierter als oben erwähnt. In der MYSQL-Konfigurationsdatei sind zwei Standardkodierungen definiert my.ini bzw. Es befindet sich in [client] Standardzeichensatz und Standardzeichensatz in [mysqld] Zum Festlegen der standardmäßig verwendeten Codierung für Clientverbindungen bzw. interne Datenbanken.
Die oben angegebene Codierung ist eigentlich der Befehlszeilenparameter, wenn der MYSQL-Client eine Verbindung zum Server herstellt. Character_set_client, um dem MYSQL-Server mitzuteilen, welche Codierung die empfangenen Client-Daten haben, anstatt die Standardcodierung zu verwenden.
2. Die Kodierung der Seitendeklaration stimmt nicht mit der Kodierung der Datei selbst überein. Dies kommt selten vor, da der Künstler beim Erstellen der Seite verstümmelte Zeichen sieht. In den meisten Fällen wird es nach der Veröffentlichung geändert. Einige kleinere Fehler werden durch das Öffnen der Seite in der falschen Codierung und das anschließende Speichern verursacht.
Oder Sie können eine FTP-Software verwenden, um Dateien direkt online zu ändern, z. B. CuteFTP. Aufgrund einer falschen Software-Kodierungskonfiguration ist die Konvertierung falsch. Code.
3. Einige Freunde, die virtuelle Hosts mieten, haben trotz der korrekten Einstellung der oben genannten drei Codierungen immer noch verstümmelte Zeichen. Die Webseite lautet beispielsweise GB2312 Codiert, IE und andere Browser erkennen es beim Öffnen immer als UTF-8. Die Seite HEAD hat angegeben, dass es sich um GB2312 handelt. Ändern Sie die Browser-Codierung manuell auf GB2312. Die folgende Seite wird normal angezeigt.
Der Grund dafür ist, dass der Server-Apache die globale Standardkodierung des Servers festlegt und AddDefaultCharset in httpd.conf hinzufügt UTF-8 . Zu diesem Zeitpunkt sendet der Server zuerst den HTTP-Header und seine Priorität ist höher als die auf der Seite deklarierte Codierung. Natürlich erkennt der Browser ihn falsch.
Administratoren sollten zwei Lösungen hinzufügen Fügen Sie DefaultCharset GB2312 hinzu, um die globale Konfiguration zu überschreiben, oder konfigurieren Sie sie in .htaccess in Ihrem eigenen Verzeichnis.
Zusammenfassung:
Kurz gesagt, der beste und schnellste Weg, verstümmelten chinesischen PHP-Code zu lösen, besteht darin, die Kodierung der Seitendeklaration mit der internen Kodierung von in Einklang zu bringen Die angeforderte Seitenzahl stimmt nicht mit der internen Codierung der Datenbank überein , legen Sie die Verbindungskodierung fest, mysql_query("SET NAMES XXX");
1.Chinesische verstümmelte Zeichen auf der PHP-Seite
Verwandte Videoempfehlungen: 1.
Dugu Jiujian (4)_PHP-Video-Tutorial
Das obige ist der detaillierte Inhalt vonWie löse ich verstümmelten chinesischen PHP-Code? Einführung in drei Situationen verstümmelter chinesischer Zeichen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!