Как декодировать параметр с пробелом в URL с помощью javascript?

#javascript #urlencode

#javascript #urlencode

Вопрос:

Я пытаюсь извлечь параметр из URL, но в одном параметре пробел заменен на » «, поэтому извлекаемый мной параметр равен «iphone 4», но на самом деле это «iphone 4», как я могу преобразовать во вторую форму, decodeURIComponent здесь не работает.

Ответ №1:

 function decodeParameter(param) {
   return decodeURIComponent(param.replace(/ /g, ' '));
}
  

Комментарии:

1. Вам нужно выполнить замену знака плюс перед отменой эскейпа, а не после. В противном случае реальные знаки плюс будут преобразованы в пробелы.

2. На самом деле escape / unescape не влияет на символы * @ — _ . /, и это все равно приведет к удалению допустимых знаков в URL. encodeURI / decodeURI (который на самом деле должен использоваться для URL-адресов) имеет еще более длинный список зарезервированных символов ;/?:@=amp;# и специальные символы $-_. !*'(), разрешено в соответствии с RFC 1738, который останется неизменным. Судя по всему, эта проблема все еще не решена.

3. Устаревшая функция unescape()

4. @SimoneMelloni Я обновил свой ответ. Я знаю, что escape / unescape устарели, но посмотрите на исходную дату ответа 😉

Ответ №2:

 "iPhone 4".replace(" "," ");  
  

Что должно это сделать?

Комментарии:

1. Заменит только первое вхождение.

Ответ №3:

Это неоднозначная вещь, потому что вы действительно не знаете, означает ли это пробел или фактический знак плюс. Если вы также отвечаете за создание URL-адресов, вы можете решить эту проблему с помощью соответствующей функции кодирования URL, которая будет использовать для кодирования пробелов. Если вы просто собираете их откуда-то еще, что ж, у вас остается возможность предположить, что every означает пробел :).

Вы можете заменить все с помощью этого кода:

 your_text.replace(/ /g," ");