#javascript
#javascript
Вопрос:
Я хотел бы сформировать ссылку на стороне клиента.
Я думаю, что это должно быть urlencoded, но я довольно смущен этим. Правильно ли это?
var link = document.createElement("a");
//addParams function just replaces the 0th and 1th occurrence with values
a.link = url.addParams(valueO, value1); // url is /home/testpage.aspx?{0}={1}
Ответ №1:
-
Разве это не должно быть
link.href = url.addParams(valueO, value1);
? -
И оба
value0
иvalue1
должны быть отправлены (по отдельности) либо черезescape()
, либоencodeURIComponent()
(я полагаю, что последнее рекомендуется вместоescape()
). Вероятно, вы захотите сделать это в,addParams()
перед заменой{0}
и{1}
в строке URL.Вы также могли бы сделать что-то вроде
addParams(encodeURIComponent(value0), encodeURIComponent(value1))
но, на мой взгляд, это вызовет проблемы, если вы забудете где-то закодировать некоторые значения в вызове. Было бы лучше перенести кодировку в саму функцию. -
Вот объяснение того, что
escape(), encodeURI(), encodeURIComponent()
делают, чем они отличаются и когда использовать каждое из них.
Ответ №2:
Я думаю, вам следует сделать link.href = escape("<your url>");
плюс вам нужно добавить немного innerHTML — link.innerHTML = 'Click Here';
…и затем, наконец, добавьте ее на страницу в какой-то момент.
Комментарии:
1. но как насчет кодирования? обязательно ли нам явно обрабатывать это?
2. я согласен с вышесказанным. изменен пост.
3. AFAIK,
escape()
это не очень безопасно, поскольку работает только с ASCII. Кроме того, это оставит допустимый символ URI в строке запроса нетронутым, что может быть проблемой. Лучше всего кодировать каждую пару ключ-значение в строке запроса отдельно, используяencodeURIComponent()
там, где это возможно.
Ответ №3:
var link = document.createElement('a');
var href = document.createAttribute('href');
link.setAttribute(href,'http://www.example.com?' paramKey '=' paramValue);
link.innerText ="Go here";
Комментарии:
1. Firefox и некоторые другие браузеры используют
textContent
вместоinnerText
.