4 Tipps, die Ihnen helfen, sich keine Sorgen mehr über die chinesische PHP-Codierung zu machen

伊谢尔伦
Freigeben: 2016-11-25 11:34:20
Original
871 Leute haben es durchsucht

Das Problem der chinesischen Kodierung in der PHP-Programmierung hat viele Menschen beunruhigt. Der Grund für dieses Problem ist eigentlich sehr einfach. Jedes Land (oder jede Region) legt den Zeichenkodierungssatz für den Computerinformationsaustausch fest Vereinigte Staaten. Chinas GB2312-80, Japans JIS usw. Als Grundlage für die Informationsverarbeitung in diesem Land/dieser Region spielen Zeichenkodierungssätze eine wichtige Rolle bei der Vereinheitlichung der Kodierung. Zeichenkodierungssätze werden je nach Länge in zwei Kategorien unterteilt: SBCS (Einzelbyte-Zeichensatz) und DBCS (Doppelbyte-Zeichensatz). In früher Software (insbesondere Betriebssystemen) wurden verschiedene lokalisierte Versionen (L10N) eingeführt, um die Computerverarbeitung lokaler Zeicheninformationen zu lösen. Zur Unterscheidung wurden Konzepte wie LANG und Codepage eingeführt. Aufgrund der überlappenden Codebereiche verschiedener lokaler Zeichensätze ist es jedoch schwierig, Informationen untereinander auszutauschen; die Kosten für die unabhängige Wartung jeder lokalisierten Version der Software sind hoch. Daher ist es notwendig, die Gemeinsamkeiten in der Lokalisierungsarbeit zu extrahieren und sie konsistent zu verarbeiten, um spezielle Lokalisierungsverarbeitungsinhalte zu minimieren. Dies wird auch Internationalisierung (118N) genannt. Verschiedene Sprachinformationen werden als Locale-Informationen weiter standardisiert. Der zugrunde liegende verarbeitete Zeichensatz wurde zu Unicode, der fast alle Glyphen enthält.

Heutzutage basiert der Großteil der Kernzeichenverarbeitung von Software mit internationalen Merkmalen auf Unicode. Wenn die Software ausgeführt wird, werden die entsprechenden lokalen Zeichenkodierungseinstellungen entsprechend den jeweiligen Gebietsschema-/Sprach-/Codepage-Einstellungen bestimmt , und basierend darauf Lokale Zeichen verarbeiten. Während der Verarbeitung ist eine Konvertierung zwischen Unicode und lokalen Zeichensätzen oder sogar zwischen zwei verschiedenen lokalen Zeichensätzen mit Unicode als Zwischenprodukt erforderlich. Diese Methode wird in der Netzwerkumgebung weiter ausgeweitet, und alle Zeicheninformationen an beiden Enden des Netzwerks müssen entsprechend den Zeichensatzeinstellungen auch in akzeptable Inhalte umgewandelt werden.

Probleme mit der Zeichensatzkodierung in Datenbanken

Beliebte relationale Datenbanksysteme unterstützen alle die Datenbank-Zeichensatzkodierung, was bedeutet, dass Sie beim Erstellen einer Datenbank eigene Zeichensatzeinstellungen angeben und die Datenbankdaten speichern können in der angegebenen Kodierung. Wenn eine Anwendung auf Daten zugreift, findet sowohl am Ein- als auch am Austrittspunkt eine Konvertierung der Zeichensatzkodierung statt. Bei chinesischen Daten sollte die Einstellung der Datenbankzeichenkodierung die Integrität der Daten gewährleisten. GB2312, GBK, UTF-8 usw. sind alles optionale Datenbank-Zeichensatzkodierungen. Natürlich können wir auch ISO8859-1 (8-Bit) wählen, aber wir müssen ein 16-Bit-chinesisches Zeichen oder Unicode aufteilen, bevor die Anwendung schreibt Teilen Sie sie in zwei 8-Bit-Zeichen auf. Nachdem Sie die Daten gelesen haben, müssen Sie die beiden Bytes zusammenführen und die SBCS-Zeichen identifizieren. Daher empfehlen wir nicht, ISO8859-1 als Datenbank-Zeichensatzkodierung zu verwenden. Dadurch wird nicht nur die Zeichensatzkodierungsunterstützung der Datenbank selbst nicht vollständig genutzt, sondern es erhöht sich auch die Komplexität der Programmierung. Beim Programmieren können Sie zunächst mithilfe der Verwaltungsfunktionen des Datenbankverwaltungssystems prüfen, ob die chinesischen Daten korrekt sind.

Bevor die Datenbank abgefragt wird, führt das PHP-Programm zunächst mysql_query("SET NAMES xxxx"); aus, wobei xxxx die Kodierung Ihrer Webseite ist (charset=xxxx in der Webseite). xxxx=utf8, wenn Auf der Webseite ist charset=gb2312, dann haben fast alle WEB-Programme einen gemeinsamen Code zum Herstellen einer Verbindung zur Datenbank, der in einer Datei abgelegt wird. Fügen Sie einfach mysql_query("SET NAMEN xxxx").

 SET NAMES Zeigt an, welcher Zeichensatz in der vom Client gesendeten SQL-Anweisung verwendet wird. Daher teilt die SET NAMES-Anweisung „utf-8“ dem Server mit, dass „zukünftige Informationen von diesem Client den Zeichensatz utf-8 verwenden“. Es gibt außerdem den Zeichensatz für die Ergebnisse an, die der Server an den Client zurücksendet (wenn Sie beispielsweise eine SELECT-Anweisung verwenden, gibt es an, welcher Zeichensatz für die Spaltenwerte verwendet wird).

Häufig verwendete Techniken zum Auffinden von Problemen

Das Auffinden chinesischer Codierungsprobleme verwendet normalerweise die dümmste und effektivste Methode – das Drucken des internen Codes der Zeichenfolge nach der Verarbeitung durch das Programm, das Sie für verdächtig halten. Durch Drucken des internen Codes einer Zeichenfolge können Sie herausfinden, wann chinesische Zeichen in Unicode konvertiert werden, wann Unicode wieder in chinesischen internen Code konvertiert wird, wann ein chinesisches Zeichen zu zwei Unicode-Zeichen wird und wann eine chinesische Zeichenfolge in eine Zeichenfolge konvertiert wird Fragezeichen, wann wurden die höherwertigen Bits der chinesischen Zeichenfolge abgeschnitten...

Auch die Verwendung einer geeigneten Beispielzeichenfolge kann dabei helfen, den Fragetyp zu unterscheiden. Zum Beispiel: „aaah aa?@aa“ und andere chinesische und englische Zeichenfolgen mit charakteristischen GB- und GBK-Zeichen. Im Allgemeinen werden englische Zeichen nicht verzerrt, egal wie sie konvertiert oder verarbeitet werden (wenn Sie auf sie stoßen, können Sie versuchen, die Länge aufeinanderfolgender englischer Buchstaben zu erhöhen).

Lösen Sie das verstümmelte Problem verschiedener Anwendungen

1) Verwenden Sie Tags, um die Seitenkodierung festzulegen

Die Funktion dieses Tags besteht darin, anzugeben, welche Zeichensatzkodierung der Browser des Clients verwendet Um die Seite anzuzeigen, kann xxx GB2312, GBK, UTF-8 (anders als MySQL, das UTF8 ist) usw. sein. Daher können die meisten Seiten diese Methode verwenden, um dem Browser mitzuteilen, welche Codierung beim Anzeigen dieser Seite verwendet werden soll, um Codierungsfehler und verstümmelte Zeichen zu vermeiden. Aber manchmal werden wir feststellen, dass dieser Satz immer noch nicht funktioniert, egal welcher xxx ist, der Browser verwendet immer die gleiche Codierung, darüber werde ich später sprechen.

Bitte beachten Sie, dass es sich um HTML-Informationen handelt und nur eine Anweisung ist, die lediglich anzeigt, dass der Server die HTML-Informationen an den Browser übergeben hat.

 2) header("content-type:text/html; charset=xxx");

 Die Funktion dieser Funktion header() besteht darin, die Informationen in den Klammern an http zu senden Kopfzeile. Wenn der Inhalt der Klammern dem im Artikel entspricht, ist die Funktion im Grunde dieselbe wie die Beschriftung. Wenn Sie das erste vergleichen, werden Sie feststellen, dass die Zeichen ähnlich sind. Der Unterschied besteht jedoch darin, dass der Browser bei Vorhandensein dieser Funktion immer die von Ihnen angeforderte XXX-Kodierung verwendet und niemals ungehorsam ist. Daher ist diese Funktion sehr nützlich. Warum passiert das? Dann müssen wir über den Unterschied zwischen http-Headern und HTML-Informationen sprechen:

Der http-Header ist eine Zeichenfolge, die vom Server gesendet wird, bevor HTML-Informationen mithilfe des http-Protokolls an den Browser gesendet werden. Das Tag gehört zu den HTML-Informationen, sodass der von header() gesendete Inhalt zuerst den Browser erreicht. Der beliebte Punkt ist, dass header() eine höhere Priorität hat (ich weiß nicht, ob ich das sagen kann). Wenn eine PHP-Seite sowohl Header("content-type:text/html; charset=xxx") als auch Header("content-type:text/html; charset=xxx") hat, erkennt der Browser nur den früheren http-Header und nicht Meta. Natürlich kann diese Funktion nur innerhalb von PHP-Seiten verwendet werden.

Es stellt sich auch die Frage, warum Ersteres definitiv funktioniert, Letzteres jedoch manchmal nicht. Aus diesem Grund möchten wir als nächstes über Apache sprechen.

 3) AddDefaultCharset

 Im conf-Ordner des Apache-Stammverzeichnisses befindet sich das gesamte Apache-Konfigurationsdokument httpd.conf.

Öffnen Sie httpd.conf mit einem Texteditor. Zeile 708 (verschiedene Versionen können unterschiedlich sein) enthält AddDefaultCharset xxx, wobei xxx der Codierungsname ist. Die Bedeutung dieser Codezeile: Stellen Sie den Zeichensatz im HTTP-Header der Webseitendatei auf dem gesamten Server auf Ihren Standard-xxx-Zeichensatz ein. Das Vorhandensein dieser Zeile entspricht dem Hinzufügen einer Headerzeile („content-type:text/html; charset=xxx“) zu jeder Datei. Jetzt können Sie verstehen, warum der Browser immer gb2312 verwendet, obwohl er auf utf-8 eingestellt ist.

Wenn auf der Webseite ein Header („content-type:text/html; charset=xxx“) vorhanden ist, wird der Standardzeichensatz in den von Ihnen festgelegten Zeichensatz geändert, sodass diese Funktion immer vorhanden ist nützlich. Wenn Sie vor AddDefaultCharset xxx ein „#“ hinzufügen, diesen Satz auskommentieren und die Seite keinen Header („content-type...“) enthält, ist das Meta-Tag an der Reihe, wirksam zu werden.

Die Prioritätsreihenfolge der oben genannten ist unten aufgeführt:

.. header("content-type:text/html; charset=xxx")

.. AddDefaultCharset xxx

 ..

  Wenn Sie ein Webprogrammierer sind, wird empfohlen, jeder Ihrer Seiten einen Header („content-type: text/html; charset=xxx“) hinzuzufügen So können Sie sicherstellen, dass es auf jedem Server korrekt angezeigt werden kann und über eine starke Portabilität verfügt.

 4) Die default_charset-Konfiguration in PHP.ini:

 Der default_charset = „gb2312“ in php.ini definiert den Standardsprachenzeichensatz von PHP. Im Allgemeinen wird empfohlen, diese Zeile auszukommentieren und den Browser die Sprache automatisch anhand des Zeichensatzes im Webseiten-Header auswählen zu lassen, anstatt eine zwingende Anforderung zu stellen, sodass Webdienste in mehreren Sprachen auf demselben Server bereitgestellt werden können.

Fazit

Tatsächlich ist die chinesische Codierung in der PHP-Entwicklung nicht so kompliziert wie gedacht. Obwohl es keine Regeln zum Auffinden und Lösen von Problemen gibt und verschiedene Betriebsumgebungen unterschiedlich sind, sind die Prinzipien dahinter unterschiedlich sind gleich. Das Verständnis der Kenntnis von Zeichensätzen ist die Grundlage für die Lösung von Zeichenproblemen. Allerdings werden mit den Änderungen im chinesischen Zeichensatz nicht nur die PHP-Programmierung, sondern auch Probleme in der chinesischen Informationsverarbeitung noch einige Zeit bestehen bleiben.


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage