Xpoint
   [напомнить пароль]

Особенности юникода в IE

Содержание этой темы стало основой для статьи в Базе Знаний Xpoint: Передача IE символов Unicode
2003-12-16 18:00:33 [обр] Давид Мзареулян [досье]
Я, дорогая редакция, ничего не понимаю:( Если в форме ввода IE (на странице, выданной, скажем, в CP1251) встречаются unicode-символы, то он всю форму тоже отправляет в юникоде. Это ещё понять можно. Но почему, например, символ с кодом 0x0394 (большая греческая дельта) отправляется как %83%A2 ? Это не UTF-16 и не UTF-8. А что же это?
спустя 1 час 32 минуты [обр] Давид Мзареулян [досье]

Поэкспериментировать можно здесь: http://hiero.ru/ieunic.php

Я тут провёл небольшое исследование вопроса: http://www.livejournal.com/users/david_m/338790.html. Какой-то ответ нащупался, но настолько абсурдный...

спустя 1 час 41 минуту [обр] Давид Мзареулян [досье]
...
ОК, возможно, я неправильно выразился. Я имел в виду символы, которые отсутствуют в той кодировке, в которой выдана страница с формой. XPoint не позволяет вставлять в текст entity, поэтому я не могу привести тут примера запроса. Наберите что-нибудь в форме по-русски (или в том же Яндексе), а в конец строки вставьте (из "таблицы символов"), например, греческую букву "альфа" (U+03B1). И посмотрите, что будет.
спустя 20 часов [обр] Давид Мзареулян [досье]

ОК, я, в общем, пришёл к некоторому выводу относительно данной проблемы. IE, встретив в юзерском инпуте символы, отсутствующие в кодировке страницы (и в CP1251), шлёт данные в японской кодировке Shift-JIS.

Может быть, всё-таки, кто-то ещё с этим глюком сталкивался, и может объяснить, почему IE ведёт себя именно так, а не иначе?

спустя 25 минут [обр] Александр Самойлов [досье]

Давид Мзареулян:
сделал такую ASP страничку

<pre><form method="GET">
<textarea name="text">проверка &#945;</textarea>
<input type="submit">
</form>
Получен текст: <%=Request("text")%>

результаты те же самые т.е. в после получен текст - идет какая-то ботва, но если добавить

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
</head>

то отображается нормально, т.е. в после получен текст - идет проверка альфа

браузер IE 6.0

спустя 18 минут [обр] Давид Мзареулян [досье]

Александр Самойлов[досье]: Чёрт возьми, похоже, что Вы правы...
Мой скрипт таков (php):

<?
if($_REQUEST['text'])
   $txt = htmlspecialchars($_REQUEST['text']);
else
   $txt = "проверка &#945;";

header("Content-Type: text/html; charset=windows-1251");
?>
<html>

<head>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
</head>

<body>
<pre>

<form action="<?=$_SERVER['PHP_SELF']?>" method="GET">
<textarea name="text"><?=$txt?></textarea>
<input type="submit">
</form>

Получен текст: <?=$_REQUEST['text']?>

Коды символов: <?=preg_replace('/./e','sprintf("%%%02X",ord("\0"))',$_REQUEST['text'])?>

</pre>
</body>
</html>

Я вставил META и, действительно, альфа сконвертилась в entity. А если мету убрать (оставив при этом header!), то опять идёт японщина. Хм... вообще-то, эта мета просто дублирует header...

спустя 3 дня [обр] Давид Мзареулян [досье]
ОК, похоже, глюк если не понят, то, по крайней мере, локализован. Спасибо Александру Самойлову[досье]!
Тему, наверное, можно закрывать.
Powered by POEM™ Engine Copyright © 2002-2005