为什么 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。请改用按钮。
我很困惑为什么 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。请改用按钮。