@AleDv

Почему конкатенация строк вызывает повторное кодирование?

Есть URL, который содержит кириллицу. Например:

city = $('select[name=city]').val();
url = '?city=' + city + "&sort=date";
document.location.href = url;


При переходе по такому урлу, кирилица отрабатывает нормально (site.com/?city=Москва&sort=date)

Если же, применить конкатенацию и добавить в урл ещё один параметр, например :

city = $('select[name=city]').val();
url = '/rent/s/';
url += '?city=' + city + "&sort=date";
document.location.href = url;


То кириллица кодируется, и ссылка получается вида site.com/?city=%25D0%259A%25D0%25B8%25D1%2580%25D0%25BE%25D0%25B2&sort=date

Почему так происходит? Как получить урл с кириллицей в последнем случае? Никак не могу понять.
  • Вопрос задан
  • 137 просмотров
Пригласить эксперта
Ответы на вопрос 3
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Нужно переменную city декодировать через decodeURIComponent.
city = $('select[name=city]').val();
url = '/rent/s/';
url += '?city=' + decodeURIComponent(city) + "&sort=date";
document.location.href = url;
Ответ написан
Комментировать
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
Браузеры все по разному работают с кириллицей в ссылках.
Как хотят так и показывают.
Это не от кода зависит.

Да и зачем?
Ответ написан
abyrkov
@abyrkov
JavaScripter
Это автоматический encodeURIComponent. Если вам нужно получить исходные значения, то используйте decodeURIComponent.
Что касается волнений по поводу того, что url разный... запрос кириллицы будет всегда через преобразование ее. А сервер будет должен парзить уже такой вариант по-любому
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы