在JavaScript onClick事件处理程序中转义双引号

时间:2009-07-04 05:22:29

标签: javascript html javascript-events escaping

下面的简单代码块可以在静态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 个答案:

答案 0 :(得分:80)

你试过吗

&quot; \x22

而不是

\"

答案 1 :(得分:52)

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

答案 2 :(得分:6)

虽然我同意CMS以不引人注目的方式(通过像jquery或dojo这样的lib)执行此操作,但这也是有用的:

<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>

barfs的原因不是因为JavaScript,而是因为HTML解析器。它没有逃脱引用的概念,它在查找结束引用时发现它并找到它并将其作为onclick函数返回。这是无效的javascript,但是在JavaScript尝试执行函数之前你找不到错误..

答案 3 :(得分:5)

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

答案 4 :(得分:1)

我认为最好的方法是分配onclick处理程序unobtrusively

这样的事情:

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

//...


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