PHP + кодировка символов + параметр GET - PullRequest
1 голос
/ 24 марта 2012

Я реализовал скрипт PHP.
Я запускаю свой PHP-скрипт по следующему URL: http://server/script.php?param1=%80t%80

Итак, я передаю параметр GET в мой PHP-скрипт.
Параметр называется param1.
param1 содержит строку «€ t €», которая закодирована в виде URL «% 80t% 80».

Мой PHP-скрипт кодируется нормой UTF-8.
Мне было интересно, какая кодировка символов применяется к строке, содержащейся в $ _GET ["param1"].

Конечно, кодировка символов в $ _GET ["param1"] не является UTF-8.
Причина: следующая команда в моем PHP-скрипте приводит к «80 74 80», что является шестнадцатеричным представлением $ _GET ["param1"].

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

Если кодировка символов в $ _GET ["param1"] была UTF-8, тогда предыдущая команда PHP выдает "e2 82 ac 74 e2 82 ac".

Кодировка символов в $ _GET ["param1"] не соответствует ISO-8859-1, так как символ € не включен в кодировку IS0-8859-1.
Для просмотра таблицы кодировки ISO-8859-1 перейдите на http://en.wikipedia.org/wiki/ISO/IEC_8859-1
Таким образом, внутренняя кодировка PHP, возвращаемая функцией mb_internal_encoding, не применяется к $ _GET ["param1"], потому что это IS0-8859-1.

Кто-нибудь знает, какая кодировка применяется к строке, содержащейся в $ _GET ["param1"]?

Ответы [ 2 ]

0 голосов
/ 24 марта 2012

Конечно, кодировка символов в $ _GET ["param1"] не является UTF-8. причина: следующая команда в моем сценарии PHP приводит к "80 74 80" который является шестнадцатеричным представлением $ _GET ["param1"].

Это именно то, что вы ожидаете, потому что это то, что вы написали. Параметр% 80t% 80 означает три символа: шестнадцатеричное 80, «t», шестнадцатеричное 80.% 80 означает «шестнадцатеричное 80». Вы вручную указываете конкретное шестнадцатеричное значение, кодировка символов вообще не подходит.

Попробуйте это:

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

А это:

http://server/script.php?param1=%e2%82%ac%74%e2%82%ac
0 голосов
/ 24 марта 2012

Я не уверен, что понимаю, почему вы используете распаковку, пытаясь решить проблему с кодировкой символов, которую пытаетесь решить.Итак, все идет ...

Я полагаю, вы пытаетесь прочитать значение $ _GET ['param1'] с помощью чего-то вроде:

$ var = $ _GET ['param1'];Я предлагаю вам попробовать urldecode $ var = urldecode ($ _ GET ['param1']) и затем использовать функции для обработки многобайтовых строк http://gr.php.net/manual/en/ref.mbstring.php или использовать функции iconv.

Надеюсь, что вышеупомянутое помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...