Heim  >  Artikel  >  Backend-Entwicklung  >  Was soll ich tun, wenn in der PHP-Get-Anfrage verstümmelte chinesische Zeichen erscheinen?

Was soll ich tun, wenn in der PHP-Get-Anfrage verstümmelte chinesische Zeichen erscheinen?

藏色散人
藏色散人Original
2020-08-24 09:34:594061Durchsuche

Lösungen für verstümmelte chinesische Zeichen in PHP-Get-Anfragen: 1. Verwenden Sie [$name = iconv("gbk","utf-8",$name);], um die verstümmelten Zeichen zu lösen; 2. Verwenden Sie [mb_convert_encoding($name , „utf“ -8“, „gbk“);] Methode.

Was soll ich tun, wenn in der PHP-Get-Anfrage verstümmelte chinesische Zeichen erscheinen?

Empfohlen: „PHP-Video-Tutorial

php empfängt verstümmelte chinesische Parameter, die von der GET-Methode übergeben werden

Ich habe kürzlich eine einfache Seite geschrieben, um chinesische Parameter aus dem Browser zu übergeben (test. php ?name=test), egal wie die UTF-8-Seite eingestellt ist, es werden verstümmelte Zeichen angezeigt. Ich habe gegoogelt und viele Lösungen gefunden, aber was ist die Ursache des Problems? Niemand hat sich eingehend mit diesem Thema befasst. Aus Neugier musste ich herausfinden, was die Ursache dafür war, und es würde mir auch einige Erfahrung bringen!

Werfen wir zunächst einen Blick auf den einfachen Testcode:

<?php   
header("Content-Type:text/html;charset=UTF-8");   
$name = $_GET[&#39;name&#39;];   
var_dump($name);   
?>

Die Testergebnisse lauten wie folgt:

Was soll ich tun, wenn in der PHP-Get-Anfrage verstümmelte chinesische Zeichen erscheinen?

Der Code Das ist die Codierung der Antwort Der Inhalt ist utf-8, was angezeigt wird. Der Inhalt ist tatsächlich verstümmelt. Bitte beachten Sie hier, dass die Länge der von var_dump ausgegebenen Variablen nur 4 beträgt. Offensichtlich muss die Länge der beiden chinesischen Zeichen unter der UTF-8-Kodierung mehr als 4 Byte betragen. Schauen wir uns dann die URL von Firefox an, um darauf zuzugreifen page

Was soll ich tun, wenn in der PHP-Get-Anfrage verstümmelte chinesische Zeichen erscheinen?

FireFox kodiert automatisch die chinesische URL, sodass wir sehen können, dass der Test zu %B2%E2%CA%D4 wird. Offensichtlich sind hier zwei Wörter Bytes. Es handelt sich um ein chinesisches Codierungsformat wie gb2313, gbk usw., nicht um eine UTF-8-Codierung. Wenn wir die Kodierung der Seite auf gbk umstellen, werden die chinesischen Parameter normal angezeigt, siehe Bild unten

Was soll ich tun, wenn in der PHP-Get-Anfrage verstümmelte chinesische Zeichen erscheinen?

Als nächstes führen wir einen weiteren Test durch. Der Code lautet wie folgt :

<?php   
header("Content-Type:text/html;charset=UTF-8");   
$name = $_GET[&#39;name&#39;];   
var_dump($name);   
?>   
  

Testergebnisse, normal angezeigt:

Was soll ich tun, wenn in der PHP-Get-Anfrage verstümmelte chinesische Zeichen erscheinen?

Also, was verursacht dieses Problem?

Die Antwort ist, dass wir alle das chinesische System verwenden und die Standardkodierung des Browsers natürlich auf die Lokalisierung eingestellt ist. Zum Beispiel die Standardkodierung von IE und Firefox Computer ist die GB-Serie.

Wenn der Browser die vom Benutzer eingegebene URL anfordert, sendet er standardmäßig das Chinesisch in der URL im Standardcodierungsformat anstelle des Codierungsformats der Seite. Aus diesem Grund sind die Links mit Chinesisch auf der Seite normal die Links, die wir manuell eingeben

Der Grund, warum der Code verstümmelt ist. Wenn wir die Standardcodierung des Browsers auf utf-8 anpassen, wird auf die gleiche Weise das Chinesisch in der Eingabe-URL in utf-8 codiert.

Zusätzlich zu den oben genannten Situationen tritt diese Situation in den folgenden Situationen auf:

Wenn die von der GBK-codierten Seite generierte Adresse mit der UTF-8-Seite verknüpft ist, wird das Chinesisch der GBK-Seite im GBK-Format codiert und auf die nächste Seite übertragen werden, werden nach dem Empfang der UTF-8-Kodierung definitiv verstümmelte Zeichen angezeigt.

Das URL-Rewriting-Modul von IIS, die neu geschriebene chinesische Codierung ist ebenfalls gbk. Wenn Ihre Seite UTF-8-Codierung hat, sind die Rewriting-Parameter ungültig. In Situationen wie diesen müssen wir die integrierte Transkodierungsfunktion von PHP verwenden, um Kodierungsprobleme zu lösen:

Option 1:

$name = iconv("gbk","utf-8",$name);

Option 2:

mb_convert_encoding($name, "utf-8", "gbk");

Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn in der PHP-Get-Anfrage verstümmelte chinesische Zeichen erscheinen?. 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