为什么 javascript 协议会自动解码 URL?

why javascript protocol decode the URL automatically?

我很困惑为什么 javascript 协议解码编码的 URL,例如:

    <a href="javascript:myFunction('%3DcDO4w67epn64o76');">press</a> 
    function myFunction(id)
    {
        alert(id); //it will generate =cDO4w67epn64o76
    }

我在加密和解密中使用这些字符串。

请给我一个真正的原因和解决方案(原因对我来说很重要),我知道我可以替换(=)符号,但我担心其余的编码字符串被解码也由包装器。

注意:在php中,GET、REQUEST全局变量,url是自动解码的。

因为它在一个 href 属性中,这里需要 URL,所以浏览器是 "normalizing" "URL" 的 URI 编码(使用 javascript 伪方案).

你可以把它放在一个不同的属性中然后得到它,就像这样:

function myFunction(element) {
  console.log(element.getAttribute("data-value")); //it will generate =cDO4w67epn64o76
}
<a href="javascript:;" onclick="myFunction(this)" data-value="%3DcDO4w67epn64o76">press</a> 

...尽管我不鼓励使用 onclick="..." 处理程序。相反:

function linkHandler(e) {
  console.log(this.getAttribute("data-value"));
  e.preventDefault();
}


var links = document.querySelectorAll("a[data-value]");
Array.prototype.forEach.call(
  links,
  function(link) {
    link.addEventListener("click", linkHandler, false);
  }
);
<a href="javascript:;" data-value="%3DcDO4w67epn64o76">press</a>

使用javascript:方案的URL仍然是URL。

您试图在 URL 中的 JavaScript 字符串中存储 URL。

当把外面的URL解码成JavaScript时,百分号编码的字符被解码。

要执行您正在尝试的操作,您需要将 JavaScript 中的任何特殊字符(如 %)转换为 URL 编码:

<a href="javascript:myFunction('%253DcDO4w67epn64o76')%3B">test</a>

尽管如此,您应该只将其用于创建小书签。

如果您想 运行 JavaScript 当单击某些内容时,请使用单击事件处理程序。您可以使用 onclick 属性,但在现代方法中使用 addEventListener(对于等于 "not the 1990s" 的现代值)。

同样,如果您不在某处 link,请不要使用 link。请改用按钮。