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

use*_*046 60 html javascript escaping javascript-events

下面的简单代码块可以在静态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>
Run Code Online (Sandbox Code Playgroud)

Lan*_*uhn 84

你试过了吗

&quot; 要么 \x22

代替

\"
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚在类似的情况下在FF3.6和IE8中对此进行了测试,但它没有用.然而,替换"with"确实.我也测试了上面的确切代码,它有两种方式.简而言之,\ x22似乎不适用于所有场景,你应该尝试"在那种情况下. (7认同)
  • 尼斯.&QUOT; 似乎适用于Webkit,Firefox和Opera中的html标记属性. (3认同)

Ase*_*ore 53

它需要进行HTML转义,而不是Javascript转义.更改\"&quot;


set*_*eth 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>
Run Code Online (Sandbox Code Playgroud)

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

  • Downvote.你不需要这样的框架! (2认同)

Mar*_*osi 5

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