2012-03-24 3 views
1

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

Итак, я передаю параметр 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 переменного тока 74 e2 82 переменного тока".

Кодировка символов в $ _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"]?

+0

Почему вы используете распаковывать? – Andreas

ответ

0

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

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

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

Надеюсь, что это поможет.

+0

Я использовал функцию распаковки только для целей тестирования. Мне нужно было увидеть байты, представляющие строку, содержащуюся в param1. Моя конечная цель - кодирование UTF-8 каждой строки, полученной из параметра GET. Я планировал использовать функцию php mb_convert_encoding, но мне нужно знать, какая кодировка изначально используется для представления строк в массиве GET. – user1139666

0

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

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

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

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

И это:

http://server/script.php?param1=%e2%82%ac%74%e2%82%ac 
Смежные вопросы