Я думал, что значения, введенные в формы, правильно кодируются браузерами.Результат JS encodeURIComponent отличается от результата, созданного FORM
Но этот простой тестовый файл "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 кодирует значение входного сигнала в «Евро-% E2% 82% AC "
в то время как браузер в запрос GET пишет только простой "евро-% 80"
Может ли кто-нибудь объяснить?
Как кодировать все так же, как и FORM (windows-1252), используя Javascript ??? (функция выхода не работает, encodingURIComponent тоже не работает)?
Или может использоваться encodeURIComponent для ненужных преобразований?
@Gumbo: спасибо, я понимаю сейчас. Но это заставляет меня задуматься над другим вопросом, который я уже задал, для чего полезен этот проклятый encodingURIComponent? Я имею в виду, что значение, закодированное FORM, не может быть ошибочным, даже если я использую cp1252, поэтому почему я должен использовать этот проклятый encodeURIComponent для кодирования URI, не могу ли я просто использовать простое escape-функцию JS, которое возвращает значения, идентичные закодированным по ФОРМ. Я знаю, что это может быть нехорошо, но в конце я предпочитаю кодировать вещи точно так же, как это делает FORM в браузере. http://stackoverflow.com/questions/2238515/encodeuricomponent-is-really-useful –
@Marco Demaio: 'escape' имеет другой формат:' escape ("€") === "% u20AC" '. И что касается цели encodeURIComponent: Представьте, что вы хотите создать URI, который содержит значение '&' as (например, 'bar & baz'). '' ...? Foo = bar & baz "' даст два аргумента (* foo * и * baz *), потому что '&' является специальным символом. Но '' ...? Foo = "+ encodeURIComponent (" bar & baz ")' будет делать это. – Gumbo
Извините, я не объяснил правильно, и я сказал мусор, я знаю, что мне нужно кодировать символы «&» в компоненте GET, но как я кодирую все так же, как и FORM с помощью cp1252 с помощью JS? Использование escape - это не так, но использование encodeURICompoenent - это не так, потому что e кодируется по-разному. Есть ли какая-нибудь функция в JS для этого? Извините, я также обновил вопрос. –