Проблема с юникодовым постом

M3Y

Guest
Проблема с юникодовым постом

Простая проблема. Наверняка все знают как решается, а я не могу пока найти.

Есть страница в кодировке win1251. Есть форма, в ней textarea. Пишем русский текст, вставляем (например, нечаянно) юникодый символ и постим. Приходит такая штука:
§±§а§б§в§а§Т§е§Ы§д§Ц §в§С§г§к§Ъ§ж§в§а§У§С§д§о
Броузер - Internet Explorer 6.

На вскидку, кто-нибудь узнает такой текст? Это модифицированный utf-8. Ищу способ вернуть его обратно. Или вообще какие-нибудь мысли как этого избежать.
 

Demiurg

Guest
что значит "Это модифицированный utf-8" ?
 

M3Y

Guest
Ни одна доступная мне прога или функция в этой строке не узнает utf. Но это видно невооруженным взглядом. Я попробовал написать перекодировщик, но он работает процентов на 80 (в связи с моим слабым знанием теории). Собственно кодировщик использует метод тыка. Хотелось бы прояснить ситуацию теоретически.
 

Demiurg

Guest
предлагаю повторить подобную ситуацию и посмотреть, какие заголовки шлет браузер.
 

M3Y

Guest
В заголовках ничего интересного найдено не было.
_SERVER["CONTENT_TYPE"] = application/x-www-form-urlencoded
В тесте, который я только что прогнал, в качестве стартового утфного символа был какой-то нижний апостроф.
Причем, насколько я помню, после перезагрузки формат может поменяться. Но чаще на разных компах мне встречался стартовый символ в виде параграфа.
 

SiMM

Новичок
UTF-16BE? Хотя честно говоря - не похоже. Было бы гораздо лучше, если бы ты привёл результат
PHP:
echo preg_replace('#.#se','dechex(ord("$0"))." "',$str);
 

M3Y

Guest
Опера делает вот так (русский текст + код символов, т.е. "русский √√")
f0 f3 f1 f1 ea e8 e9 20 26 23 38 37 33 30 3b 26 23 38 37 33 30 3b

IE делает так (выглядит это нечитабельно):
84 82 84 85 84 83 84 83 84 7b 84 79 84 7a 20 81 e3 81 e3
 

SiMM

Новичок
> 84 82 84 85 84 83 84 83 84 7b 84 79 84 7a 20 81 e3 81 e3
Я даже затрудняюсь сказать, что это за кодировка. Что-то на UTF-8 (коды переменной длины) может и похоже - но не оно.
 

M3Y

Guest
Написал тестик
http://unlight.ru/test.utf_ie_bug.php
В случае с символом √ получается стартовый символ 84 (нижний апостроф), а для символа é - получается a7 (параграф).
В остальных броузерах, как и ожидалось, все в порядке.

Первые две строки - настоящий utf-8 от алфавита.
Вторые две - пост.
 

SiMM

Новичок
Код

PHP:
<?=header('Content-Type: text/html; charset=windows-1251')?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
</head>
<body>
<form method=post>
<textarea wrap=soft name=text cols=30 rows=5>АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя&radic;</textarea>
<input type=submit>
</form>
<pre>
<?=@$_POST['text']?>
</pre>
</body>
</html>
Работает на ура.
 

M3Y

Guest
Интересно, убрал мету - все поломалось. Ладно, учту.
Спасибо.
 
Сверху