Помогите, туплю. Крдированные строки из get-запроса и кодировки.

Василий М.

Новичок
В браузере в 2 разных вкладках адреса:

/usersRegions.php?term=%CC%EE%F1%EA%E2%E0
/usersRegions.php?term=Москва

Скрипт:
PHP:
header('Content-type: text/plain; charset=UTF-8');

echo 'word: '; var_dump($_GET['term']);
echo "detect_encoding: " . mb_detect_encoding($_GET['term']) . "\n";

echo "make iconv...\n";
$searchWord = iconv("UTF-8", "CP1251", $_GET['term']);

echo "detect_encoding: " . mb_detect_encoding($searchWord) . "\n";
echo 'word: '; var_dump($searchWord);
exit;
Для адреса /usersRegions.php?term=Москва все "ок":
Код:
word: string(12) "Москва"
detect_encoding: UTF-8
make iconv...
detect_encoding: UTF-8 // WTF - не преобразовалась строка?
word: string(6) "������" // ОК, преобразование в cp1251
почему тут detect_encoding дает UTF, а по факту - это cp1251?

Для адреса /usersRegions.php?term=%CC%EE%F1%EA%E2%E0:
Код:
word: string(6) "������"
detect_encoding: UTF-8
make iconv...
detect_encoding: ASCII // WTF?!
word: bool(false) WTF???!!!
вообще какой-то бред.

Помогите понять суть проблемы.
 

Вурдалак

Продвинутый новичок
По-моему, очевидно, что mb_detect_encoding() просто ошибается на строке urldecode('%CC%EE%F1%EA%E2%E0'). Это даже не валидная UTF-8 строка. Нахрена ты вообще её используешь?
 

Вурдалак

Продвинутый новичок
Тут интересно именно то, что это невалидная UTF-8 строка, но при этом mb_detect_encoding() ошибается. Явный баг, уж проверку на [валидность] UTF-8 сделать проще простого.
 

Василий М.

Новичок
все тема закрыта.. пол дня сидел и откровенно тупил, почему у меня encodeURI не работает. оказалось, я правил не тот файл
 
Сверху