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

时间:2016-12-20 10:58:22

标签: javascript php urlencode urldecode

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

因为它位于需要URL的href属性中,所以浏览器正在“规范化”“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>

答案 1 :(得分:1)

使用javascript:方案的网址仍然是网址。

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

将外部URL解码为JavaScript时,编码百分比的字符将被解码。

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

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

你应该只使用它来创建bookmarklet。

如果要在单击某些内容时运行JavaScript,请使用单击事件处理程序。您可以使用onclick属性,但在现代方法中使用addEventListener(对于现代等于“不是20世纪90年代”的值)。

同样,如果您没有在某处链接,请不要使用链接。改为使用按钮。