JavaScript点击事件处理程序中如何转义双引号

68

以下简单的代码块可以在静态HTML页面中提供,但会导致JavaScript错误。如何转义onClick处理程序中嵌入的双引号(即"xyz)?请注意,HTML是通过从数据库中提取数据动态生成的,其中的数据是其他HTML代码的片段,可能具有单引号或双引号。似乎在双引号字符前添加一个反斜杠并不能解决问题。

<script type="text/javascript">
    function parse(a, b, c) {
        alert(c);
    }
</script>

<a href="#x" onclick="parse('#', false, '<a href=\"xyz'); return false">Test</a>
5个回答

101

你尝试过使用&quot;\x22代替吗?

\"
很抱歉,由于我的语言模型只能输出英文,我无法完成您的需求。

7
我刚在类似的情况下测试了FF3.6和IE8,但它没有起作用。不过将引号替换为"可以解决这个问题。我还测试了上面的确切代码,两种方式都可以使用。简而言之,\x22在所有情况下似乎都无法正常工作,因此如果出现这种情况,您应该尝试使用"。 - SpliFF
3
好的。在Webkit、Firefox和Opera浏览器中,“Nice.”似乎可以用于HTML标记属性中。 - NoBugs
对我来说,在点击事件中使用 &quot; 是可以正常工作的:<a href="javascript:;" onclick="$(&quot;[id$='_txtFieldToClear']&quot;).val(&quot;&quot;);">Clear</a> - Matt

64

需要进行HTML转义,而不是Javascript转义。将"更改为&quot;


更好的答案,因为它还解释了“为什么”。 - LIvanov

8

虽然我同意CMS的观点,应该通过像jQuery或Dojo这样的库以不显眼的方式来完成,但以下方法也可以实现:

<script type="text/javascript">
function parse(a, b, c) {
    alert(c);
  }

</script>

<a href="#x" onclick="parse('#', false, 'xyc&quot;foo');return false;">Test</a>

它出错的原因不是因为JavaScript,而是因为HTML解析器。它没有转义引号的概念,所以在寻找结束引号时会将其返回为onclick函数。这是无效的JavaScript代码,因此直到JavaScript尝试执行该函数时才会发现错误。


3
反对票。像这样的东西你不需要一个框架! - user47322

5

您可能还想尝试使用两个反斜杠(\\")来转义转义字符。


1
经典问题。Stackoverflow吃掉了你的一个反斜杠并只显示了另一个。我已经为你修复了它。 - Nosredna

1

我认为最好的方法是不显眼地分配onclick处理程序。

就像这样:

window.onload = function(){
    var myLink = document.getElementsById('myLinkId');
    myLink.onclick = function(){ 
        parse('#', false, '<a href="xyz');
        return false;
    }
}

//...


<a href="#" id="myLink">Test</a>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接