2012-03-24 16 views
1

Ich habe ein PHP-Skript implementiert.
Ich führe mein PHP-Skript über die folgende URL: http://server/script.php?param1=%80t%80PHP + Zeichencodierung + GET-Parameter

Also gebe ich einen GET-Parameter an mein PHP-Skript.
Der Parameter heißt param1.
param1 enthält die Zeichenfolge "€ t €", die als "% 80t% 80" URL-codiert ist.

Mein PHP-Skript ist mit der UTF-8-Norm codiert.
Ich frage mich, welche Zeichencodierung auf die Zeichenfolge in $ _GET ["param1"] angewendet wird.

Sicher ist die Zeichenkodierung auf $ _GET ["param1"] nicht UTF-8.
Der Grund: Der folgende Befehl in meinem PHP-Skript ergibt "80 74 80", was die hexadezimale Darstellung von $ _GET ["param1"] ist.

var_dump(unpack("H*", $_GET["param1"])); 

Wenn die Zeichencodierung auf $ _GET [ "param1"] UTF-8 wurde dann der vorherige Befehl an PHP "e2 82 ac 74 e2 82 ac" führen würde.

Die Zeichenkodierung auf $ _GET ["param1"] ist nicht ISO-8859-1, auch nicht, weil das € -Symbol nicht im IS0-8859-1-Zeichensatz enthalten ist.
Um die ISO-8859-1 Kodierungstabelle zu sehen gehe zu http://en.wikipedia.org/wiki/ISO/IEC_8859-1
Also die PHP interne Kodierung von der mb_internal_encoding Funktion zurückgegeben gilt nicht für $ _GET ["param1"], weil es IS0-8859-1 ist.

Weiß jemand, welche Zeichenkodierung für die Zeichenfolge in $ _GET ["param1"] gilt?

+0

Warum Sie verwenden auspacken? – Andreas

Antwort

0

Ich bin mir nicht sicher, ich verstehe, warum Sie entpacken, während Sie versuchen, mit einem Zeichencodierungsproblem umzugehen, das Sie versuchen zu lösen. So geht es hier ...

Ich nehme an, Sie versuchen, den Wert von $ _GET [ 'param1'] mit so etwas wie zu lesen:

$ var = $ _GET [ 'param1']; Ich schlage vor, Sie versuchen, urldecode $ var = urldecode ($ _ GET ['param1']) und dann Funktionen für die Handhabung multiByte Strings http://gr.php.net/manual/en/ref.mbstring.php oder verwenden Sie die iconv Funktionen.

Ich hoffe, das obige hilft.

+0

Ich habe die Entpackfunktion nur zu Testzwecken benutzt. Ich musste die Bytes sehen, die die in param1 enthaltene Zeichenfolge darstellen. Mein letztes Ziel ist die UTF-8-Kodierung jeder von einem GET-Parameter empfangenen Zeichenfolge. Ich habe geplant, die php-Funktion mb_convert_encoding zu verwenden, aber ich muss wissen, welche Codierung anfänglich verwendet wird, um die Strings in GET-Array darzustellen. – user1139666

0

Sicher ist die Zeichenkodierung auf $ _GET ["param1"] nicht UTF-8. Die Grund: Der folgende Befehl in meinem PHP-Skript führt zu "80 74 80" , die die hexadezimale Darstellung von $ _GET ["param1"] ist.

Dies ist genau das, was Sie erwarten würden, weil es das ist, was Sie geschrieben haben. Der Parameter% 80t% 80 bedeutet drei Zeichen: hex 80, "t", hex 80.% 80 bedeutet "hex 80". Sie geben manuell einen bestimmten hexadezimalen Wert an, die Zeichencodierung wird nicht angezeigt.

Try this:

var_dump(unpack ("H*", urldecode("%80t%80"))); 

Und dieses:

http://server/script.php?param1=%e2%82%ac%74%e2%82%ac