2

我还没有找到正确的答案:

应该在 & 中转义 (&)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>

谢谢!

4

2 回答 2

2

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

var test = ab&lt;

这将被破坏而不会转义&&amp;(参见this fiddle)。因此,如果您完全控制了您的代码,并且您确定其中不会出现任何 HTML 实体,那么您不应该使用 escape &。它会让你的代码更干净。但是,如果有可能某些 HTML 实体出现在这里并破坏了所有内容,则您必须逃避&.

于 2013-06-02T08:36:55.587 回答
1

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

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

简而言之,当您有疑问时应该将其转义,并且通常避免在属性中使用任何复杂的 JavaScript 代码。在属性值内使用函数调用是可以的,但任何更复杂的东西都容易导致混乱。事实上,许多人喜欢将所有 JavaScript 代码放入外部 JavaScript 文件中,这是有充分理由的。作为一个副作用,它可以避免这样的问题——由将 JavaScript 嵌入 HTML 引起的。

于 2013-06-02T12:30:56.210 回答