是不是应该在onclick =“......”中逃脱?

时间:2013-06-02 08:23:05

标签: html onclick escaping html-escape-characters

我还没有找到合适的答案:

应该& (&符号)在onclick="..."中被转义? (或者就此而言,在每个HTML属性中?)

我试过在jsFiddle和W3C的验证器上运行转义和非转义测试,两者都正在运行......

http://jsfiddle.net/6LuES

<div onclick="if (1==1 && 2==2) alert('hello there');">Without escape</div>
<div onclick="if (1==1 &amp;&amp; 2==2) alert(&#39;hello there&#39;);">With escape</div>

http://validator.w3.org/#validate_by_input

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><title></title></head><body>

<div onclick="if (1==1 && 2==2) alert('hello there');">Click me</div><br>
<div onclick="if (1==1 &amp;&amp; 2==2) alert(&#39;hello there&#39;);">Click me</div>

</body></html>

谢谢!

2 个答案:

答案 0 :(得分:2)

如果以下字符未完成某些HTML实体,则将未转义的&保留在属性中是有效的。参见:

var test = ab&lt;

如果不将&转换为&amp;(参见this fiddle),我们就会将其删除。因此,如果您完全控制了代码,并确信其中不会显示任何HTML实体,则不应该转义&。它会让你的代码更清晰。但如果有可能某些HTML实体出现在这里并破坏了所有内容,则必须逃避&

答案 1 :(得分:1)

在任何HTML版本中,使用属性值中的引用&amp;来表示符号字符“&amp;”始终是正确的。

使用它是否也正确取决于上下文和HTML版本。在任何XHTML风格中,它都是永远不正确的。在其他方面,它主要取决于下一个字符的种类,但是 - 如果它是名称字符 - 也取决于HTML版本和属性的性质(URL值属性的处理方式不同)。

简短的故事是,如果有疑问,你应该逃避它,并且通常避免在属性中使用任何复杂的JavaScript代码。在属性值中使用函数调用是可以的,但任何更复杂的东西都容易导致混淆。实际上,很多人赞成将所有JavaScript代码放入外部JavaScript文件中,原因很多;作为副作用,它可以避免这样的问题 - 这是由于将JavaScript嵌入到HTML中引起的。