Как urlencode location.search params в IE7, используя JavaScript - PullRequest
1 голос
/ 05 февраля 2010

Я заметил, что IE7 не кодирует URL-адреса параметров строки запроса, полученных из JavaScript, например:

var qs = location.search;

В Firefox параметры закодированы. Как я могу написать специфичный для IE код для URL-кодирования параметров так же, как FireFox?

Например, в Firefox эта строка запроса:

?val=<script>

//gets rewritten as:

?val=%3Cscript%3E

Ответы [ 2 ]

3 голосов
/ 05 февраля 2010

Обычно правильная функция для URL-кодирования строки для использования в части URL-адреса - encodeURIComponent. Не используйте escape, которая является устаревшей нестандартной нестандартной схемой кодирования, уникальной для JavaScript. Это похоже на кодирование параметров URL, но обрабатывает плюсы и все не-ASCII символы по-разному. Поместите его вместе со стандартным декодером URL, и вы получите ошибки.

Тем не менее, вам не следует называть encodeURIComponent сверх location.search, если он дает вам плохие символы, такие как < или > (которые не должны появляться в URL, но в которые IE позволяет вам вводить), потому что он будет дважды кодировать символы, которые уже правильно закодированы; например, действительный %3C в адресе (если пользователь перешел по ссылке правильно на ваш сайт) будет неправильно преобразован в %253C.

Исправление «небезопасных» символов URL-адресов при одновременном оставлении уже закодированных символов - это то, для чего предназначена функция encodeURI; попробуйте это (во всех браузерах, не нужно нюхать). Он редко используется, но может быть тем, что вам нужно. В противном случае вы смотрите на назойливую замену функции регулярного выражения и шестнадцатеричного кодирования.

0 голосов
/ 05 февраля 2010

Вы можете использовать функцию escape :

var qs = escape(location.search);
...