Как конвертировать данные из URL в UTF-8?
Занялся вопросом декодирования запросов переданых в URL. Имеется в виду отправка данных скрипту через url при использовании mod_rewrite. Пример работы можете увидеть в на Wikipedia.org. Если мы пишем в адресную строку, или создаём такую ссылку: http://ru.wikipedia.org/wiki/Слово , то движок вики получает “Слово” в url-закодированном виде, раскодирует его и пытается найти в базе это “Слово”.
Знаем, что Вики базируется на utf-8 кодировке, скорей всего база тоже. Но при получении “Слова” в адресной строке оно не будет закодировано в UTF-8 формат. Оно передаётся в формате ASCII (как показывает функция mb_detect_encoding).
Результатом моих иследований стал тот факт, что код привеённый ниже, конвертирует введённый латышский текст (со всеми специфическими (Baltic) символами) в UTF-8 формат.
$word = mb_convert_encoding(urldecode($source_word), "UTF-8", "auto");
Но этот же код не работает для кирилицы – выводит ошибку о недопустимых символах. Для неё необходим такой код:
$word = mb_convert_encoding(urldecode($source_word), "UTF-8", "WINDOWS-1251");
Получается, что если я хочу правильно конвертнуть всё в UTF-8, мне нужно написать такой код:
if(mb_convert_encoding($source_word, "UTF-8", "auto"))
$word = mb_convert_encoding(urldecode($source_word), "UTF-8", "auto");
else
$word = mb_convert_encoding(urldecode($source_word), "UTF-8", "WINDOWS-1251");
Вопросы php-программистам:
- От чего зависит кодировка в которой отправляются данные серверу через URL? От сервера, от клиента или это какой-то стандарт? Всё тот же mb_detect_encoding возвращает ASCII и для латышского и для русского языков.
- Если параметр “auto” работает для балтийских языков, то работает ли он для западноевропейских языков? А windows-1251 будет ли работать для украинского и беларусского?
- Существует ли универсальный код правильно кодирующий данные из URL в UTF-8? Или у той же Вики в базе просто список кодировок на каждый язык?





]]>Денис Радченко]]>1. Скорее всего от кодировки страницы зависит. Но в Firefox 2, если передавать URL параметры через JS, то кодировка всегда utf-8
»]]>Никита]]>От кодировки какой страницы? Если я ввожу ручками в адресную строку?
»]]>Sam]]>Зависит от кодировки страницы + от браузера. Всегда можно попользовать JS и сконвертить во что нужно.
Переходите уже на utf-8(как и сделано на wiki) и отпадут почти все проблемы.
»]]>Никита]]>В том, то и дело, что у меня все страницы в utf-8 формате (так же как и на wiki). Но не получаю я данные в utf-8 формате из URL. Они приходят в ASCII для любого языка.
Ещё раз повторяю: НЕ скрипт записывает в адресную строку слова запроса, а пользователь открывает браузер и пишет в адресной строке:
»> http: //myserver.com/search/Слово
или
> http: //myserver.com/search/Vārds
]]>Sam]]>Значит тут дело в браузере и поможет только перекодировка.
Используем iconv.
»]]>Никита]]>попробую iconv. Посмотрю, что он будет мне выдавать.
»]]>maxic]]>А использовать библиотеки функций UTF-8 не пробовали. Я так и поступил, теперь пропала “зависимость” от всего.
»Я например использую функции “от” Nasibullin Rinat
]]>L]]>всё куда проще
вы сами решение написали
надо просто декодировать url через urldecode() и всё!!!
и данные всегда будут приходить как надо, как вы их видите в адресной строке!
главное чтобы на сервере скрипт был в utf-8 сохранен и кодировка выставлена в utf-8
»