Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Chinesisch-Codierungstipps, die Sie wissen müssen?

PHP-Chinesisch-Codierungstipps, die Sie wissen müssen?

怪我咯
怪我咯Original
2017-07-06 10:52:351435Durchsuche

In diesem Artikel werden hauptsächlich vier praktische PHP-Chinesisch-Codierungstipps vorgestellt. Nachdem Sie diese gemeistert haben, müssen Sie sich keine Gedanken mehr über Codierungsprobleme machen.

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 der US-amerikanische ASCII-Code, 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 (Single Byte Character Set ) und DBCS (Double Byte Character Set). 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 bei der Zeichensatzkodierung in Datenbanken

Beliebte relationale Datenbanksysteme unterstützen alle die Datenbankzeichensatzkodierung, was bedeutet, dass dies beim Erstellen einer Datenbank möglich ist Geben Sie Ihre eigenen Zeichensatzeinstellungen an und die Datenbankdaten werden in der angegebenen Kodierung gespeichert. Wenn eine Anwendung auf Daten zugreift, erfolgt beim Ein- und Ausstieg eine Konvertierung der Zeichensatzkodierung. 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 es in zwei 8-Bit-Zeichen auf. Nach dem Lesen der Daten müssen Sie die beiden Bytes zusammenführen und die SBCS-Zeichen identifizieren. Daher empfehlen wir nicht, ISO8859-1 als Datenbankzeichensatz 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). auf der Webseite, dann xxxx=utf8, wenn charset=gb2312 auf der Webseite, dann xxxx=gb2312. Fast alle WEB-Programme verfügen über einen öffentlichen Code zum Herstellen einer Verbindung zur Datenbank , der in einer Datei abgelegt wird . Fügen Sie in dieser Datei mysql_query („SET NAMES xxxx“) hinzu, um den Zweck zu erfüllen.

 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 von chinesischen Codierungsproblemen verwendet normalerweise die dümmste und effektivste Methode – das Drucken von Zeichen nach der Verarbeitung durch das Programm, das Sie für verdächtig halten. Das Innere Code der Zeichenfolge. 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 hohen Bits der chinesischen Zeichenfolge abgeschnitten...

Die Verwendung geeigneter Beispielzeichenfolgen kann auch 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 Problem mit verstümmeltem Code in verschiedenen Anwendungen

 1) Verwenden Sie Tags, um die Seitenkodierung festzulegen

Der Zweck dieses Tags besteht darin, anzugeben, welche Zeichensatzkodierung der Browser des Clients zum Anzeigen der Seite verwendet. xxx kann 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 zu konvertieren in den Klammern An HTTP-Header gesendet. 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 die Priorität von header() höher ist als (ich weiß nicht, ob ich das sagen kann Das). 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 bleibt auch die Frage offen, 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 festen Regeln zum Auffinden und Lösen von Problemen und verschiedene Betriebsumgebungen gibt sind auch unterschiedlich, aber das Prinzip dahinter ist das gleiche. 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.

Das obige ist der detaillierte Inhalt vonPHP-Chinesisch-Codierungstipps, die Sie wissen müssen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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