为什么 %26 在作为 js 参数传递时被解码

Why %26 get decoded when pass as js parameter

本文关键字:参数传递 解码 js 为什么      更新时间:2023-09-26
<script>
    function postBackXTreeRequest(url)
    {  
       alert(url);
    }
</script>
<a class="tab0" target="_self" href="javascript:postBackXTreeRequest('?tvwID=A+%26+B');">test</a>

http://jsfiddle.net/tp27tbpe/

上面的代码会提醒A & B而不是让我感到困惑A+%26+B。为什么它会自动解码网址?

href属性的值是一个 URL,因此 JavaScript 被编码在 URL 中。URL 将在执行 JavaScript 之前被解码。


不要把 JavaScript 放在 href 属性中。改用不显眼的JavaScript。

<a class="tab0" target="_self" href="/server/side/fallback">test</a>
<script>
// You'll want a more specific selector that `a` here, but predicting what would suit your HTML is impossible
document.querySelector('a').addEventListener('click', function (event) {
    postBackXTreeRequest('?tvwID=A+%26+B');
    event.preventDefault();
});
</script>

在脚本中使用encodeURIComponent:

<a class="tab0" target="_self" href="javascript:postBackXTreeRequest('?tvwID=A+'+encodeURIComponent('%26')+'+B');">test</a>