Определить кодировку строки запроса URL - PullRequest
4 голосов
/ 27 января 2011

На URL запроса я могу получить строку запроса ?dir=Documents%20partag%C3%A9s или ?dir=Documents%20partag%E9s.Я думаю, что первый - UTF-8, а второй - ASCII.

Реальная строка: Documents partagés

Итак, у меня есть PHP-скрипт (в UTF-8) и чтоЯ хочу сделать, это определить, является ли строка запроса ASCII или UTF-8, и если ASCII, преобразовать его в UTF-8.

Я пытался с mb_ функциями, но строка запроса всегдаопределяется как ASCII, а версия строки запроса с URL-кодом - как UTF-8.

Как мне этого добиться?Обратите внимание, что в Википедии есть аналогичная функция - она ​​сама кодирует %E9 в %C3%A9.

1 Ответ

6 голосов
/ 27 января 2011

E9 - это 233 в десятичном виде. Это не действительный байт ASCII (только 0-127), но это é в ISO-8859-1 (Latin1). При использовании mb_convert_encoding вы можете указать несколько кодировок (например, UTF-8 и ISO-8859-1).

Это должно это исправить:

mb_convert_encoding($str, 'UTF-8', 'UTF-8,ISO-8859-1');

С помощью следующего скрипта:

$str1 = 'Documents%20partag%E9s';
$str2 = 'Documents%20partag%C3%A9s';
var_dump(mb_convert_encoding(urldecode($str1), 'UTF-8', 'UTF-8,ISO-8859-1'));
var_dump(mb_convert_encoding(urldecode($str2), 'UTF-8', 'UTF-8,ISO-8859-1'));

Я получаю:

string(19) "Documents partagés"
string(19) "Documents partagés"
...