Heim  >  Artikel  >  Backend-Entwicklung  >  Was soll ich tun, wenn PHP verstümmelte Get-Parameter erhält?

Was soll ich tun, wenn PHP verstümmelte Get-Parameter erhält?

藏色散人
藏色散人Original
2021-02-23 09:40:231846Durchsuche

Lösung dafür, dass PHP verstümmelte Get-Parameter erhält: 1. Verarbeiten Sie die Codierung über „$str=iconv(“gb2312“,“utf-8“,$str); 2. Über „mb_convert_encoding($str,“utf -8“ , „gb2312“);“-Methode.

Was soll ich tun, wenn PHP verstümmelte Get-Parameter erhält?

Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP7.1, Dell G3-Computer.

Eingehende Studie zum Empfang von verstümmeltem Code mit chinesischen GET-Parametern durch PHP

Ich glaube, dass viele PHPer auf dieses Problem stoßen werden: unter der Seite von utf-8, wenn Sie direkt auf die Adresse zugreifen Chinesische Parameter wie test.php?s=TestDer Wert des Ausgabeparameters einer solchen Adresse wird verstümmelt. Ich habe in der Suchmaschine nach relevanten Informationen gesucht und nur einige Lösungen angegeben, aber niemand hat sie studiert Die Ursachen dieses Problems. Heute schreibe ich diesen Artikel, um die Ursache dieses Problems zu untersuchen:

Zuerst demonstrieren wir dieses Problem, der Testcode und die laufenden Ergebnisse sind wie folgt.

Code:

Was soll ich tun, wenn PHP verstümmelte Get-Parameter erhält?

Testergebnis:

Was soll ich tun, wenn PHP verstümmelte Get-Parameter erhält?

Die Kodierung ist utf-8 , display Der Inhalt ist tatsächlich verstümmelt.


Bitte beachten Sie hier, dass die Länge der Variablen var_dump nur 4 beträgt. Offensichtlich muss die Länge der beiden chinesischen Schriftzeichen mehr als unter dem utf betragen. 8 Kodierung. 4 Bytes

FireFox

kodiert automatisch die chinesische

URL, sodass wir sehen können, dass der Test %B2%E2%CA%D4 wird. Ein Wort besteht hier aus zwei Bytes, nämlich

gb2313

,

gbk

und anderen chinesischen Codierungsformaten anstelle der Was soll ich tun, wenn PHP verstümmelte Get-Parameter erhält?utf-8

-Codierung. (Empfohlen: „

PHP Video Tutorial“) Wenn wir die Kodierung der Seite auf gbk umstellen, werden die chinesischen Parameter normal angezeigt, siehe Bild unten

Zu diesem Zeitpunkt stellt sich eine interessante Frage: Wie kommt es, dass Parameter wie das chinesische Label emlog nicht verfälscht werden?

Nach mehreren Tests habe ich einen kleinen Unterschied festgestellt:

emlogDer Link zum chinesischen Parameter wird auf der Seite generiert, während wir ihn oben manuell getestet haben. Direkt eingegeben in der Adressleiste,

Wenn wir direkt einen Link wie http://be-evil.org/?tag=Original eingeben, meldet das Programm auch, dass dies nicht möglich ist gefunden werden. Gehen Sie zum Etikett

Der Testcode lautet wie folgt:


Was soll ich tun, wenn PHP verstümmelte Get-Parameter erhält?

Die Testergebnisse werden normal angezeigt :


Was soll ich tun, wenn PHP verstümmelte Get-Parameter erhält?

Bitte achten Sie auf die URL-Codierung, die im roten Feld im Bild oben markiert ist 6 Bytes anstelle der vorherigen 2 Bytes, was darauf hinweist, dass die chinesischen Parameter korrekt als utf-8 codiert wurden.

Was verursacht also das Auftreten dieses Problems?

Die Antwort ist die Standardkodierung des Browsers Erschwerend kommt hinzu, dass wir alle ein chinesisches System verwenden und die Standardkodierung des Browsers natürlich auf Lokalisierung eingestellt ist, wie z. B. IE auf meinem eigener Computer Die Standardkodierungen von s FireFox sind alle gb-Serie, siehe Bild unten:

IEs Standardeinstellungen:


Was soll ich tun, wenn PHP verstümmelte Get-Parameter erhält?

FirefoxStandardeinstellungen:


. Was soll ich tun, wenn PHP verstümmelte Get-Parameter erhält?

Aufgrund dieser Einstellung sendet der Browser, wenn er die vom Benutzer eingegebene URL anfordert, standardmäßig die chinesische URL im Standardkodierungsformat anstelle des Kodierungsformats der Seite ist der Grund, warum die Links mit chinesischen Schriftzeichen auf der Seite normal sind, die von uns manuell eingegebenen Links jedoch verstümmelt sind. Wenn wir auf die gleiche Weise die Standardkodierung des Browsers auf utf-8 anpassen, werden die in url eingegebenen Chinesen gemäß utf-8 kodiert.

Darüber hinaus tritt diese Situation in den folgenden Situationen auf:

Wenn die von der gbk-codierten Seite generierte Adresse mit verknüpft ist utf-8 Seite, das Chinesisch der gbk Seite wird im Format von gbk codiert und an die nächste Seite gesendet, sodass nach utf-8 definitiv verstümmelte Zeichen erscheinen Codierung empfangen wird.

IISs url-Codierung ist auch gbk, wenn Ihre Seite utf-8en ist Codierung, dann Schreibparameter neu schreiben wird ungültig sein.

In Situationen wie diesen müssen wir die integrierte Transkodierungsfunktion von php verwenden, um das Kodierungsproblem zu lösen:

Schema. 1 :

$str =iconv("gb2312",utf-8",$str);

Schema mb_convert_encoding( $str, "utf-8", "gb2312");

Ich hoffe, dieser Artikel wird denjenigen hilfreich sein, die

PHPer

:)

Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn PHP verstümmelte Get-Parameter erhält?. 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