Декодирование URL в Javascript - PullRequest
4 голосов
/ 15 ноября 2008

Я хочу декодировать строку, которая была закодирована с использованием метода java.net.URLEncoder.encode().

Я пытался использовать функцию unescape() в javascript, но проблема возникает для пробелов, потому что java.net.URLEncoder.encode() преобразует пробел в '+', но unescape() не преобразует '+' в пробел.

Ответы [ 4 ]

2 голосов
/ 15 ноября 2008

Использование JavaScript-функции escape / unescape почти всегда неправильно, оно несовместимо с URL-кодированием или любой другой стандартной кодировкой в ​​Интернете. Не-ASCII символы обрабатываются неожиданно, так же как пробелы, и старые браузеры не обязательно ведут себя так же.

Как упоминалось в roenving, вы хотите использовать метод decodeURIComponent (). Это более новое дополнение, которое вы не найдете в IE 5.0, поэтому, если вам нужно поддерживать этот браузер (будем надеяться, что нет!), Вам нужно реализовать эту функцию самостоятельно. А для символов не ASCII это означает, что вам нужно реализовать кодировщик UTF-8. Код доступен, если вам это нужно.

2 голосов
/ 15 ноября 2008

Попробуйте decodeURI("") или decodeURIComponent("")! -)

1 голос
/ 15 ноября 2008

decodeURI [Component] также не обрабатывает + как пробел (по крайней мере, в FF3, где я тестировал).

Простой обходной путь:

alert(decodeURIComponent('http://foo.com/bar+gah.php?r=%22a+b%22&d=o%e2%8c%98o'.replace(/\+/g, '%20'))) 

Действительно, unescape блокирует этот URL: ему известны только символы UTF-16, такие как% u2318, которые не являются стандартными (см. Процентное кодирование ).

0 голосов
/ 21 марта 2009

Попробуйте

var decoded = decodeURIComponent(encoded.replace(/\+/g," "));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...