Der folgende Editor bringt Ihnen einen Artikel über die Verwendung von PHP zum Konvertieren von Unicode in UTF-8 (empfohlen) . Der Herausgeber findet es ziemlich gut, deshalb werde ich es jetzt mit Ihnen teilen und es allen als Referenz geben. Folgen wir dem Herausgeber und werfen wir einen Blick darauf.
Die Beispiele sind wie folgt:
function unescape($str) { $str = rawurldecode($str); preg_match_all("/(?:%u.{4})|.{4};|\d+;|.+/U",$str,$r); $ar = $r[0]; //print_r($ar); foreach($ar as $k=>$v) { if(substr($v,0,2) == "%u"){ $ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,-4))); } elseif(substr($v,0,3) == ""){ $ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,3,-1))); } elseif(substr($v,0,2) == "") { $ar[$k] = iconv("UCS-2BE","UTF-8",pack("n",substr($v,2,-1))); } } return join("",$ar); } echo unescape("紫星蓝");
Heute gab es Rückmeldungen von Benutzern, dass die von Benutzern des Formularsystems übermittelten Daten auf Chinesisch verstümmelt wären. Tests ergaben, dass das Problem in der Iconv-Konvertierung liegt.
iconv('UCS-2',
'GBK',
'Chinese')
Google
Suche ergab, dass der Grund darin liegt, dass die UCS-2-Kodierungsmethode auf dem Der Linux-Server unterscheidet sich von dem von Winodws. Inkonsistent.
Also habe ich es geändert in
iconv('UCS-2BE',
'GBK',
'Chinese')
Probieren Sie es aus, Chinesisch ist normal
Im Folgenden sind die unausgesprochenen Regeln bezüglich der UCS-2-Kodierung für die beiden Plattformen aufgeführt
UCS-2-Kodierung:
1 UCS-2 ist nicht gleich UTF-16. UTF-16 kodiert jedes Byte mithilfe des ASCII-Zeichenbereichs, während UCS-2 jedes Byte außerhalb des ASCII-Zeichenbereichs kodieren kann. UCS-2 und UTF-16 belegen bis zu zwei Bytes pro Zeichen, ihre Codierungen sind jedoch unterschiedlich.
2. Für UCS-2 ist die Standardeinstellung unter Windows UCS-2LE. Mit MultibyteToWidechar (oder A2W) wird UCS-2LE-Unicode generiert. Windows Notepad kann Text als UCS-2BE speichern, was zusätzlichen Konvertierungsebenen entspricht.
3 Für UCS-2 ist die Standardeinstellung unter Linux UCS-2BE. Verwenden Sie iconv (geben Sie UCS-2 an), um UCS-2BE-Unicode zu konvertieren und zu generieren. Wenn Sie UCS-2 von der Windows-Plattform konvertieren, müssen Sie UCS-2LE angeben.
4. Angesichts des unterschiedlichen Verständnisses von UCS-2 auf mehreren Plattformen wie Windows und Linux (UCS-2LE, UCS-2BE). MS befürwortet, dass Unicode über ein Boot-Flag (UCS-2LE FFFE, UCS-2BE FEFF) verfügt, um anzuzeigen, dass die folgenden Zeichen Unicode sind und Big-Endian oder Little-Endian identifizieren. Wenn sich also herausstellt, dass die von der Windows-Plattform kommenden Daten dieses Präfix haben, geraten Sie nicht in Panik.
5. Die Ausgabe der Linux-Kodierung, z. B. die Ausgabe aus einer Datei oder die Ausgabe von printf, erfordert eine entsprechende Kodierungsanpassung auf der Konsole (wenn die Kodierung nicht übereinstimmt, ist dies im Allgemeinen der Fall). Mit dem Programm kompiliert Es gibt einige Beziehungen zur Codierung zu diesem Zeitpunkt. Der Konvertierungseingang der Konsole muss die aktuelle Systemcodierung überprüfen. Wenn beispielsweise die aktuelle Kodierung der Konsole UTF-8 ist, können UTF-8-kodierte Dinge korrekt angezeigt werden, GBK jedoch nicht. Wenn die aktuelle Kodierung GBK ist, kann die GBK-Kodierung jedoch nicht angezeigt werden . Spätere Systeme sollten aktualisiert werden. Über Terminals wie Putty müssen Sie jedoch immer noch die Codierungskonvertierung des Terminals einrichten, um das Problem verstümmelter Zeichen zu vermeiden.
Die obige Implementierungsmethode (empfohlen) zum Konvertieren von Unicode in UTF-8 mit PHP ist der gesamte vom Herausgeber geteilte Inhalt. Ich hoffe, dass er Ihnen eine Referenz geben kann, und ich hoffe auch, dass Sie die chinesische PHP-Website unterstützen . .