Javascript callFunction()中有问题的引号

时间:2014-04-21 05:12:18

标签: javascript htmlspecialchars

我想知道如何保持在文本中使用callFunction()传递给JavaScript函数的单引号和双引号的能力?下面的所有三个案例似乎都失败了。

混合单引号和双引号将起作用,但我希望能够在我的文本块中使用单引号和双引号。很奇怪为什么浏览器在将html特殊字符传递给Javascript函数之前会对其进行评估。

谢谢,罗宾

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>

<script type="text/javascript">

function callFunction(text){

    alert(text);

}

</script>

</head>

<body>

<!--This will not work due to &#039;-->
<a href="javascript: callFunction('Robin&#039;s Text')">Robin&#039;s Text</a> 

<br />
<br />

<!--And this will not work due to &#034;-->
<a href='javascript: callFunction("Robin&#034;s Text")'>Robin&#034;s Text</a>

<br />
<br />

<!--Trying with a slash but not working either-->
<a href='javascript: callFunction("Robin\'s Text")'>Robin's Text</a>

</body>
</html>

2 个答案:

答案 0 :(得分:0)

谢谢大家的建议。有了它,我找到了一个可行的解决方案。似乎同时使用反斜杠和HTML特殊字符可以使它工作。我不确定为什么两者都需要?

<!--Using HTML Special Characters (&#039;) alone will not work-->
<a href="#" onClick="callFunction('Robin&#039;s Text')">Robin&#039;s Text</a>

<br />
<br />

<!--Using backslash (\) alone will not work-->
<a href="javascript: callFunction('Robin\"s Text')">Robin"s Text</a>

<br />
<br />

<!--But using a combination of both will work!-->
<a href="javascript: callFunction('Robin\&#034;s Text')">Robin"s Text</a>

答案 1 :(得分:-1)

假设JS函数的输入是机器生成的,那么你应该从服务器中转义输入,然后在客户端对其进行unescape,如下所示:

HTML:

<a href="#" onclick='callFunction("Robin%27s%20Text")'>Robin's Text</a>
<br>
<a href="#" onclick='callFunction("Robin%22s%20Text")'>Robin"s Text</a>

JS:

function callFunction(text){
    alert(decodeURIComponent(text));
}

请参阅以下工作代码:

JSFiddle