使用JS window.location在HREF和onclick中编码URL变量

时间:2018-08-30 17:09:08

标签: javascript html apostrophe

我不知道为什么此链接不起作用,但是我有一个Javascript重定向(window.opener.location),我通过URL传递了许多变量,当这些变量包含撇号时遇到了问题。我在PHP中使用URLENCODE()构建链接,当我转储源代码时,它看起来像在做我所需要的,但是当我单击链接时,Safari和Chrome都抛出“意外标识符在'www'”错误。 / p>

这似乎告诉我JS链接仍在被当作是撇号而不是等效于%27的撇号?我使用的虚拟名称“ qqq'www qqq'www”的名字和姓氏都带有撇号,以便进行测试,以尽可能破坏其他内容。

这是我遇到问题的链接:

<a href="javascript:top.close();window.opener.location='../cust/maint_cust.php?action=del_are_you_sure&cust_id=249735&lname=Qqq%27www&fname=Qqq%27www'"><em>Yes</em></a>

但是,如果我将链接更改为使用onclick而不是HREF,它可以工作吗?我意识到这也是比href ='javascript:...'更好的编码方法。

<a href="#" onclick="top.close();window.opener.location='../cust/maint_cust.php?action=del_are_you_sure&cust_id=249735&lname=Qqq%27www&fname=Qqq%27www'"><em>Yes</em></a>

除了 where 之外,其他所有内容都是相同的,我进行了JS调用。这可能是由于在编码/解码时处理HREF和onclick的方式吗?可能是因为JS嵌入在HREF调用中,所以HREF在进行链接调用之前未对撇号进行编码?

任何对此行为的见解都会受到赞赏,因此我可以更好地了解这里的实际情况。是的,它有效,但是不知道为什么让我感到自己像一个更糟糕的开发人员...

谢谢!

2 个答案:

答案 0 :(得分:0)

Your links do not have a > to end the starting <a - and yes, do not use href="javascript:

Also if you need to encode, use encodeURIComponent and lastly do not try to close the window before changing the opener.

But why not name the opener and user a target and a setTimeout?

<a target="nameOfOpener" 
href="../cust/maint_cust.php?action=del_are_you_sure&cust_id=249735&lname=Qqq%27www&fname=Qqq%27www"
onclick="setTimeout(function() {top.close()},100)"><em>Yes</em></a>

答案 1 :(得分:0)

浏览器对以'javascript:'开头的href属性进行特殊处理。在执行Javascript代码之前,将首先解码任何%xy编码(例如您的%27)。我检查了当前版本的Firefox和Chrome。我很想找到有关此功能的文档。

简单的答案是:如果您的Javascript代码包含%xy编码,请不要在href中使用“ javascript:”。

如果确实需要在href中使用“ javacript:”,请将URL放入javascript变量,然后在href的Javascript代码中引用该变量。

<script>
myURLwithEncodings = "../cust/maint_cust.php?action=del_are_you_sure&cust_id=249735&lname=Qqq%27www&fname=Qqq%27www";
</script>

<a href="javascript: window.opener.location=myURLwithEncodings; top.close();"><em>Yes</em></a>