Verstümmelte chinesische PHP-Zeichen sind eines der häufigsten Probleme bei der PHP-Entwicklung.
PHP-chinesische verstümmelte Zeichen treten manchmal auf der Webseite selbst auf, einige treten während der Interaktion mit MySQL auf und manchmal hängen sie mit dem Betriebssystem zusammen. Hier ist eine Zusammenfassung.
1. Die erste ist die Codierung der PHP-Webseite.
Die beste und schnellste Lösung besteht darin, die von der Seite deklarierte Codierung mit der internen Codierung der Datenbank in Einklang zu bringen die interne Codierung der Datenbank, mysql_query („SET NAMES KKK“) kann das Problem der verstümmelten Zeichen definitiv lösen Datei selbst und die Kodierung der Webseite sollten mit a übereinstimmen. Wenn Sie die Kodierung gb2312 verwenden möchten, muss PHP Header ausgeben: header("Content-Type: text/html; charset=gb2312"), add zur statischen Seite, alle Das Kodierungsformat der Datei ist ANSI, Sie können sie mit Notepad öffnen, speichern unter und die Kodierung als ANSI auswählen, und überschreiben Sie die Quelldatei. b. Wenn Sie die UTF-8-Codierung verwenden möchten, sollte PHP den Header ausgeben: header("Content-Type: text/html; charset=utf-8") und “ in die statische Seite ein. 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, daher müssen alle Funktionen wie substr in mb_substr geändert werden (die Erweiterung mbstring 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, die am besten mit utf8 kodiert wird. mysql] default-character-set=utf8 [mysqld] default-character-set=utf8 default-storage-engine=MyISAM Unter [mysqld] hinzufügen: default-collation=utf8_bin init_connect='SET NAMES utf8'
2. Fügen Sie mysql_query("set name's 'encoding'"); vor dem PHP-Programm hinzu, das mit der PHP-Codierung übereinstimmt. Wenn die PHP-Codierung gb2312 ist es ist utf-8, dann ist die MySQL-Codierung utf8, sodass beim Einfügen oder Abrufen von Daten keine verstümmelten Zeichen auftreten
3. PHP hängt mit dem Betriebssystem zusammen. Wenn in der Windows-Umgebung die Parameter beim Aufrufen von PHP-Funktionen utf-8-codiert sind, treten Fehler auf, z. B. move_uploaded_file(), filesize(), readfile () usw. Diese Funktionen werden häufig beim Verarbeiten von Uploads und Downloads verwendet. Beim Aufruf kann der folgende Fehler auftreten: Warnung: move_uploaded_file()[function.move-uploaded-file]: failed to open stream: Invalid argument in ... Warnung: move_uploaded_file()[function.move-uploaded-file]: '' kann nicht nach '' in ... verschoben werden Warnung: filesize() [function.filesize]: stat failed for ... in ... Warnung: readfile( ) [function.readfile]: Stream konnte nicht geöffnet werden: Ungültiges 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 in diesem Fall nicht gelesen werden In diesem Fall können Sie zunächst die Parameter in die vom Betriebssystem erkannte Kodierung konvertieren. Die Kodierungskonvertierung kann mb_convert_encoding (Zeichenfolge, neue Kodierung, ursprüngliche Kodierung) oder iconv (ursprüngliche Kodierung, neue Kodierung, Zeichenfolge) sein, sodass der Dateiname angezeigt wird Die nach der Verarbeitung gespeicherten Daten werden nicht verstümmelt. 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, nämlich eine vollständige Trennung vom System, ohne dass die Codierung des Systems berücksichtigt werden muss. Sie können als Dateinamen nur eine Folge von Buchstaben und Zahlen generieren und den ursprünglichen Namen mit chinesischen Zeichen in der Datenbank speichern. Auf diese Weise gibt es beim Aufruf von move_uploaded_file() keine Probleme, Sie müssen nur Änderungen vornehmen Der Dateiname wird mit chinesischen Schriftzeichen zum Originalnamen. Der Code zum Implementieren des Herunterladens lautet wie folgt: header("Pragma: public"); header("Expires: 0"); ; header( "Content-type: $file_size"); header("Content-Disposition: attachment; header("Content-Transfer-"); Kodierung: binär "); 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 auftreten. Im Allgemeinen gibt es zwei Gründe für das Auftreten verstümmelter Zeichen. Erstens liegt es an einem Fehler bei der Codierung (Zeichensatz), der dazu führt, dass der Browser die falsche Codierung verwendet, was zu einem Durcheinander führt „Himmlisches Buch“, das den Bildschirm ausfüllt. Zweitens wurde die Datei mit der falschen Codierung geöffnet und dann gespeichert. Beispielsweise wurde eine Textdatei ursprünglich in GB2312 codiert, aber in UTF-8-Codierung geöffnet und gespeichert. Um das obige Problem mit verstümmeltem Code zu lösen, müssen Sie zunächst wissen, welche Aspekte der Entwicklung das Codieren beinhalten:
1. Dateikodierung: Bezieht sich auf die Kodierung, in der die Seitendatei (.html, .php usw.) selbst gespeichert wird. Notepad und Dreamweaver erkennen beim Öffnen der Seite automatisch die Dateikodierung, sodass es weniger Probleme gibt. Allerdings erkennt ZendStudio die Kodierung nicht automatisch. Es öffnet die Datei nur in einer bestimmten Kodierung entsprechend der Konfiguration der Einstellungen. Wenn Sie die Datei während der Arbeit versehentlich mit der falschen Kodierung öffnen und sie nach der Änderung verstümmelt speichern Charaktere werden erscheinen (ich fühle es tief).
2. Kodierung der Seitendeklaration: Im HTML-Code HEAD können Sie um dem Browser mitzuteilen, welche Codierung für die Webseite verwendet wird. Derzeit verwendet XXX in der chinesischen Website-Entwicklung hauptsächlich GB2312 und UTF-8. 3. Codierung der Datenbankverbindung: Bezieht sich darauf, welche Codierung beim Ausführen von Datenbankvorgängen verwendet wird. Wann Beim Übertragen von Daten aus der Datenbank müssen Sie darauf achten, diese nicht mit der Codierung der Datenbank selbst zu verwechseln. Die Standardcodierung in MySQL ist beispielsweise die Latin1-Codierung, was bedeutet, dass MySQL Daten in der Latin1-Codierung speichert Andere Kodierungen werden in „latin1“ konvertiert. Wenn Sie wissen, wo die Kodierung bei der WEB-Entwicklung eine Rolle spielt, kennen Sie auch die Ursache für verstümmelte Zeichen: Die oben genannten drei Kodierungen sind inkonsistent, da die meisten der verschiedenen Kodierungen ASCII-kompatible, englische Symbole sind wird nicht angezeigt, und Chinesisch wird nicht angezeigt.
5 Die Datenbank verwendet die UTF8-Kodierung und die Seitendeklarationskodierung ist GB2312. Dies ist die häufigste Ursache für verstümmelte Zeichen. Zu diesem Zeitpunkt werden die direkten SELECT-Daten im PHP-Skript verstümmelt. Sie müssen Folgendes verwenden: mysql_query("SET NAMES GBK "); um die MYSQL-Verbindungskodierung vor der Abfrage festzulegen. Die Seitendeklarationskodierung stimmt mit der hier festgelegten Verbindungskodierung überein (GBK ist eine Erweiterung von GB2312). Wenn die Seite UTF-8-kodiert ist, können Sie Folgendes verwenden: mysql_query("SET NAMES UTF8"); Beachten Sie, dass es sich um UTF8 anstelle des häufig verwendeten UTF- handelt. 8. Wenn die auf der Seite deklarierte Kodierung mit der internen Kodierung der Datenbank übereinstimmt, müssen Sie die Verbindungskodierung nicht festlegen. Hinweis: In Tatsächlich ist die Dateneingabe und -ausgabe von MYSQL komplizierter als oben erwähnt. In der MYSQL-Konfigurationsdatei my.ini sind zwei Standardkodierungen definiert: der Standardzeichensatz in [Client] und der Standardzeichensatz in [mysqld], um die von der Client-Verbindung und der Datenbank intern verwendete Codierung festzulegen. Der Befehlszeilenparameter „character_set_client“ teilt dem MYSQL-Server beim Herstellen einer Verbindung mit, welche Codierung die Client-Daten erhalten ist, anstatt die Standardkodierung zu verwenden
2. Seitendeklarationskodierung und die Datei selbst Inkonsistente Kodierung, dies kommt selten vor, denn wenn die Kodierung inkonsistent ist, sieht der Künstler das Browser beim Erstellen der Seite wird verstümmelter Code sein. In den meisten Fällen wird dies dadurch verursacht, dass einige kleinere Fehler nach der Veröffentlichung behoben, die Seite in der falschen Codierung geöffnet und dann gespeichert werden. Oder Sie verwenden eine FTP-Software, um Dateien direkt online zu ändern, z. B. CuteFTP. Aufgrund einer falschen Software-Kodierungskonfiguration wird die falsche Kodierung konvertiert. 3. Einige Freunde, die virtuelle Hosts mieten, haben immer noch verstümmelte Zeichen, obwohl die oben genannten drei Kodierungen korrekt eingestellt sind. Wenn die Webseite beispielsweise in GB2312 kodiert ist, wird sie beim Öffnen von Browsern wie dem IE immer als UTF-8 erkannt. Der HEAD der Webseite hat bereits angegeben, dass es sich um GB2312 handelt, nachdem die Browserkodierung manuell auf GB2312 geändert wurde , die Seite wird normal angezeigt. Der Grund dafür ist, dass der Server-Apache die globale Standardkodierung des Servers festlegt und AddDefaultCharset UTF-8 in httpd.conf hinzufügt. Zu diesem Zeitpunkt sendet der Server zuerst den HTTP-Header an den Browser und seine Priorität ist höher als die auf der Seite deklarierte Codierung. Natürlich erkennt der Browser ihn falsch. Es gibt zwei Lösungen. Administratoren sollten AddDefaultCharset GB2312 zu ihrer eigenen virtuellen Maschine in der Konfigurationsdatei hinzufügen, um die globale Konfiguration zu überschreiben, oder sie in .htaccess in ihrem eigenen Verzeichnis konfigurieren. Zusammenfassung: Kurz gesagt, der beste und schnellste Weg, den am stärksten verstümmelten chinesischen PHP-Code zu lösen, besteht darin, die auf der Seite deklarierte Codierung mit der internen Codierung der Datenbank in Einklang zu bringen, wenn die für die Seite verwendete Seitennummer nicht mit der internen übereinstimmt Kodierung der Datenbank, legen Sie die Verbindungskodierung fest („SET NAMES XXX“); Dies wird das Problem der verstümmelten Zeichen definitiv lösen