Результат JS encodeURIComponent отличается от результата, созданного FORM - PullRequest
0 голосов
/ 09 апреля 2010

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

Но этот простой тестовый файл "test_get_vs_encodeuri.html" показывает, что это не так:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
   <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
   <title></title>
</head><body>

<form id="test" action="test_get_vs_encodeuri.html" method="GET" onsubmit="alert(encodeURIComponent(this.one.value));">
   <input name="one" type="text" value="Euro-€">
   <input type="submit" value="SUBMIT">
</form>

</body></html>

При нажатии кнопки отправки:

encodeURICompenent кодирует входное значение в «Euro-% E2% 82% AC»

пока браузер в запросе GET записывает только простое «Евро-% 80»

  1. Может кто-нибудь объяснить?

  2. Как мне кодировать все так же, как в FORM (windows-1252) borwser, используя Javascript ??? (функция escape не работает, encodeURIComponent не работает)) 1024 *

Или encodeURIComponent выполняет ненужные преобразования?

Ответы [ 2 ]

5 голосов
/ 10 апреля 2010

Это проблема кодировки символов. В вашем документе используется кодировка Windows-1252 , где находится в позиции 128, которая закодирована в Windows-1252 как 0x80. Но encodeURICompenent ожидает, что ввод будет UTF-8, таким образом, используя кодировку Unicode, где находится в позиции 8364 ( PDF ), которая кодируется с помощью UTF-8 0xE282AC .

Решением будет использование UTF-8 для вашего документа. Или вы пишете отображение для преобразования строк в кодировке UTF-8 в Windows-1252.

0 голосов
/ 10 апреля 2010

Я думаю, что корень проблемы в кодировках символов. Если я возуюсь с набором символов в метатеге и сохраню файл с различными кодировками, я могу заставить страницу отображать в браузере, например:

Проблема с кодировкой контента http://www.boogdesign.com/examples/encode/content-encoding-issue.png

Это € очень похоже на то, что вы получаете от encodeURIComponent. Однако я не смог найти никакой комбинации кодировок, которая бы имела какое-либо значение для того, что возвращал encodeURIComponent. Я могу изменить то, что возвращает запрос GET. Это ваша исходная страница , отправка дает URL, например:

test-get-vs-encodeuri.html?one=Euro-%80

Это версия страницы в формате UTF-8 , отправка дает URL-адрес, который выглядит следующим образом (в Firefox):

http://www.boogdesign.com/examples/encode/test-get-vs-encodeuri-utf8.html?one=Euro-€

Но если я скопирую и вставлю его, я получу:

http://www.boogdesign.com/examples/encode/test-get-vs-encodeuri-utf8.html?one=Euro-%E2%82%AC

Похоже, что если страница имеет формат UTF-8, то GET и encodeURIComponent совпадают.

...