为什么 href 属性使用 url 编码而不是 html 编码?

Why use url encoding instead of html encoding for the href attribute?

在这个 bit.ly 书签中,我看到他们正在使用 url 编码

  <a title="✚ Bitlink" href="javascript:(function()%20%7B%20var%20s%20=%20document.createElement(%22script%22);%20s.setAttribute(%22id%22,%20%22bitmark_js%22);%20s.setAttribute(%22type%22,%20%22text/javascript%22);%20s.setAttribute(%22src%22,%20%22//bitly.com/a/bitmarklet.js%22);%20(top.document.body%20%7C%7C%20top.document.getElementsByTagName(%22head%22)[0]).appendChild(s);%20%7D)();" id="bitmarklet">✚ Bitlink</a></p>

然而,由于它实际上是 JavaScript 并且不会被 URL 代理处理,我不明白他们为什么选择这种编码。

通常情况下,href 会有一个需要 url 编码的 GET 请求,但在这种情况下不需要。

这是为什么?

他们这样做是因为这是一个 a 标签。单击时,href 将由浏览器的 URL 解析器解析。任何被解析为 URL 的内容都需要进行 URL 编码。在这种情况下,它确实只是 JavaScript 并且浏览器将这样执行它,但是解析器仍然需要一个 URL 编码的字符串才不会阻塞它。