【问题标题】:Problematic Quotes in Javascript callFunction()Javascript callFunction() 中有问题的引用
【发布时间】:2014-04-21 05:12:18
【问题描述】:

我想知道如何保持在通过 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>

【问题讨论】:

  • &amp;#039;是HTML转义码,需要用JS一\u0027(注意从dec改为hex)
  • @david,没有 OP 只需要在 JavaScript 中使用正确的转义字符,然后是正确的 HTML 实体。

标签: javascript htmlspecialchars


【解决方案1】:

谢谢大家的建议。有了它,我找到了一个可行的解决方案。似乎同时使用反斜杠和 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>

【讨论】:

    【解决方案2】:

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

    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

    【讨论】:

    • 当有人在理解编码方面有问题时,请不要建议添加另一层编码。 OP 试图对 JavaScript 字符串进行 HTML 编码已经够糟糕了,不要通过在混合中添加百分比编码来使事情变得更糟。
    • 请阅读建议解决方案的假设:“假设 JS 函数的输入将是机器生成的,...”
    • 那么您的意思是,如果代码是通过编程方式生成的,您应该忽略代码生成方式中的错误并添加额外的不必要的编码层吗?不,这正是我不同意的。如果正在生成代码,请对其进行修复,以便在作为属性值输出之前通过正确的编码器进行管道传输。
    • 在这种情况下您的首选编码是什么?
    • javascript字符串的内容必须正确转义,然后javascript字符串本身必须正确进行HTML编码。就是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    相关资源
    最近更新 更多