utf-8 и urlencode

MT
На сайте с 29.11.2008
Offline
30
3104

Здравствуйте. Ест сайт на utf-8, на котором пытаюсь реализовать кириллические ссылки. делаю:

<a href="/<? echo urlencode("страница"); ?>/">ссылка на страницу</a>

На странице домен.рф/страница/ слово "страница", полученное из урла пропускаю через urldecode и на выходе получаю квадратики. Эксперементалным путем выяснил, что после декодирования слова из урла оно возвращается в windows-1251 и

<? echo iconv("windows-1251","utf-8",urldecode($str)); ?>

где $str - "страница" из урла

дает то, что нужно. Да, проблема решена, но мне такое решение не очень нравится. Объясните, пожалуйста, необразованному, почему так получается и можно ли процедуру передачи кириллического слова в урл и обратно совершать в utf-8, без лишних перекодирований и вынужденного использования iconv?

Спасибо.

LinnTroll
На сайте с 12.01.2011
Offline
15
#1

откуда приходит $str? похоже сайт совсем не "на utf-8"

http://vps.ua/ (https://vps.ua/clients/aff.php?aff=201) - самый лучший хостинг.
MT
На сайте с 29.11.2008
Offline
30
#2

$str приходит непосредственно из урл страницы. Конкретнее, так:

$RURI = $_SERVER['REQUEST_URI'];

$arruri=explode("/",$RURI);

$str=urldecode($arruri[1]);

На страницу это пробовал приходить как по ссылке с другой страницы, сформированной по принципу

echo '<a href="/'.urlencode("страница").'/">ссылка</a>';

так и напрямую, написав домен.рф/страница/ в строке адреса в браузере. В обоих случаях $str=urldecode($arruri[1]); возвращает результат в windows-1251.

У меня тоже сначала появились сомнения по поводу кодировки сайта, но

<META http-equiv=Content-Type content="text/html; charset=utf-8">

присутствует, даже в .htacces прописал

AddDefaultCharset utf-8

AddCharset utf-8 *
<IfModule mod_charset.c>
CharsetSourceEnc utf-8
CharsetDefault utf-8
</IfModule>

Более того, если я не ошибаюсь, символы в windows-1251 в строке адреса всегда закодированы и не могут выглядеть как "/страница/", из чего делаю вывод, что адрес все же приходит в нужной кодировке.

wwwwww
На сайте с 29.04.2011
Offline
195
#3

php скрипт сохранен в кодировке UTF-8? Страница на сервере?

Видишь? Свободная подпись.
MT
На сайте с 29.11.2008
Offline
30
#4

Пока что все на локальном, и да, все сохранено в utf-8.

UPD:

Нашел проблему. Как оказалось, в index.php остался кусок кода, перекодирующий все символы из utf-8 в windows-1251, если такие встречаются в адресе. Защита от прошлых проблем Яндекса.

Прошу прощения за собственную невнимательность.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий