Почему decodeURIComponent или decodeURI не могут декодировать hello+world в hello world в JavaScript?

Согласно этому:

http://en.wikipedia.org/wiki/Query_string#URL_encoding

«+» — это допустимый токен кодирования URL.

Если да, то почему decodeURIComponent или decodeURI не могут декодировать "hello+world" в "hello world"?

Если «+» действителен, то наверняка в JavaScript должна быть встроенная функция, которая может преобразовать «hello+world» в «hello world»?


person corgrath    schedule 06.03.2015    source источник
comment
здесь уже было предоставлено решение и объяснение: stackoverflow.com /вопросы/12042592/   -  person Sim1    schedule 06.03.2015


Ответы (2)


Поведение decideURIComponent определяется как "обратное" операция encodeURIComponent:

Функция decodeURIComponent вычисляет новую версию URI, в которой каждая управляющая последовательность и кодировка UTF-8, которые могут быть введены функцией encodeURIComponent, заменяются символом, который она представляет.

И encodeURIComponent заменяет пробелы не на +, а на %20.

(аналогично для decodeURI)

Если «+» действителен, то наверняка в JavaScript должна быть встроенная функция, которая может преобразовать «hello+world» в «hello world»?

Конечно, есть:

"hello+world".replace(/\+/g, ' ');
person Felix Kling    schedule 06.03.2015

Потому что encodeURIComponent будет кодировать пробел в %20, поэтому вы получите hello%20world. Если вы хотите заменить + символов, я бы предложил использовать регулярное выражение

person Joe Fitter    schedule 06.03.2015