#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," ");