Кодировка символов / URI в JavaScript выходит из синхронизации? - PullRequest
1 голос
/ 30 августа 2010

У меня есть вопрос о кодировании специальных / расширенных символов UTF-8 в URL в JavaScript.Тот же вопрос относится ко многим символам, таким как Зарегистрированный R-круг, но в моем примере используется Umlaut:

ü =% C3% BC в UTF-8 (четыре строки снизу http://www.utf8 -chartable.de/)

Если в URL-адресе содержится умлаут, представленный как UTF-8 (ü =% C3% BC), и я запускаю его через encodeURIComponent,% s закодировано, строка теперьвыглядит как "% 25C3% 25BC", и он корректно обрабатывается моей системой.Это хорошо.

url = "http://foo.com/bar.html?%C3%BC"
url = encodeURIComponent (url);
// url теперь представляется как" http% 3A% 2F% 2Ffoo.com% 2Fbar.html% 3F% 25C3% 25BC "

Однако, плохо: если предварительно закодированная строка имеет не кодированный символ, то фактическое умножение, после кодирования выглядит как"% C3% BC "и завершается ошибкой, потому что яповерьте,% s также должен быть закодирован .:

url = "http://foo.com/bar.html?ü"
url = encodeURIComponent (url);
// url теперь представлен как" http% 3A% 2F% 2Ffoo.com% 2Fbar.html% 3F% C3% BC "

Я думаю, что это не удастся, потому что он менее тщательно закодирован, чем остальная часть URL.

Таким образом, помимо общего совета илиответы на вопросы, которые я не знаю, чтобы спросить, я думаю, что я хочу знать, как получить чистый кодировку (и все другие специальные символы) для полного кодирования.Это то, что неправильно?

Спасибо за вашу помощь!Нейт

1 Ответ

0 голосов
/ 31 марта 2011

Вы не можете кодировать URL-адрес сразу. Если вы уже объединили хост, путь, параметры и т. Д. Вместе, то невозможно правильно определить, какие символы на самом деле нужно кодировать, а какие символы являются разделителями, которые нужно оставить в покое.

Единственный надежный способ создания URL-адреса - объединение уже закодированных значений:

"http://foo.com/bar.html?" + encodeURIComponent("%C3%BC")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...