Расшифровка URL в Javascript

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
0
1 930
4

Ответы 4

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

Просто потому, что он принимает строку в качестве аргумента! -)

roenving 17.11.2008 08:26

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

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

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, которые не являются стандартными (см. Процентное кодирование).

Пытаться

var decoded = decodeURIComponent(encoded.replace(/\+/g," "));

Другие вопросы по теме