Javascript: Каков рекомендуемый способ передачи URL-адресов в качестве параметров URL-адреса?
Использование '& url =' + encodeURIComponent (url); для передачи URL-адреса от браузера к серверу будет кодироваться url, но когда он декодируется на сервере, параметры url интерпретируются как отдельные параметры, а не как часть одного параметра url.
Каков рекомендуемый способ передачи URL-адресов в качестве параметров URL-адреса?
Ответы
Ответ 1
encodeURIComponent() должен работать. Например,
'&url=' + encodeURIComponent("http://a.com/?q=query&n=10")
производит
"&url=http%3A%2F%2Fa.com%2F%3Fq%3Dquery%26n%3D10"
(у которого нет значения "&" или "?" в значении).
Когда ваш сервер получает этот URL-адрес, он должен иметь возможность декодировать это, чтобы получить оригинал:
param["url"] = "http://a.com/?q=query&n=10"
Я не уверен, какой сервер вы используете (например, Rails, Django,...), но это должно работать "из коробки" в любой нормальной системе.
Ответ 2
Использование '& url =' + encodeURIComponent (url); для передачи URL-адреса от браузера к серверу будет кодироваться URL-адрес
Да, это то, что вы должны делать. encodeURIComponent
- это правильный способ кодирования текстового значения для вставки части строки запроса.
но когда он декодируется на сервере, параметры url интерпретируются как отдельные параметры, а не как часть одного параметра url.
Тогда сервер действительно сломан. Если это действительно то, что происходит, вам нужно исправить его на сервере.
код
Ответ 3
Я не пробовал, но кодирование/декодирование BASE64 также должно работать.
Ответ 4
Используйте escape() для кодирования url, он будет кодировать амперсанды, чтобы этого не произошло.
Ответ 5
Честно говоря, пойдите с Google URL Shortener. Затем вы можете просто использовать код URL в строке запроса url: http://example.com/url/A7dh3
В своем приложении возьмите это и добавьте доменное имя Google URL Shortener и выполните перенаправление. Это добавляет отслеживание URL через Google Analytics. Много преимуществ в этом подходе. Просто короткий код и добавленные данные отслеживания тоже.