window.open(), адресная строка браузера и расшифровка URL-адреса jQuery

#javascript #jquery-plugins

#javascript #jquery-плагины

Вопрос:

Я передаю значения в строке запроса URL, которые интерпретируются JavaScript и используются для заполнения элементов формы. Пользователь нажимает на ссылку на одной странице, переходит на другую страницу, которая затем расшифровывает значения из URL-адреса и заполняет поля формы.

Для декодирования URL-адреса я использую плагин jQuery URL Decoder.

Этот параметр передается в window.open() :

 http://mydomain.com/whatever?EmailAddress=me@privacy.comamp;YourName=joe schmoamp;CompanyName=TEXAS A & M - LUBBOCK, TX
  

Когда я подключаю этот URL-адрес к онлайн-версии декодера, он правильно анализируется — параметры строки запроса находятся в объекте .params, правильно декодируются.

Однако после нажатия на ссылку, когда я просматриваю window.location.href, я получаю это:

 http://mydomain.com/whatever?EmailAddress=me@privacy.comamp;YourName=joe schmoamp;CompanyName=TEXAS M amp; M - LUBBOCK, TX
  

Который выходит из декодера URL в виде гигантского беспорядка (т. Е. неправильно декодированный IMO, потому что входные данные неправильно закодированы).

Как мне (безопасно) вернуться к строке, которая правильно интерпретируется декодером URL?

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

1. Вы пробовали использовать вместо этого встроенный encodeURIComponent и decodeURIComponent ?

Ответ №1:

используйте функцию javascript, подобную этой:

 function urlencode(str) {
return escape(str)
      .replace(' ', ' ') // or replace with ' '
      .replace('@', '@');
}
  

(Я знаю, что вам не нужна первая замена, но это более полная… вы можете добавлять дополнительные замены по мере необходимости или искать полный urlencode)

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

1. По-настоящему сложная часть связана с (трудноразличимым) некодированным амперсандом в параметре CompanyName.