Html 应该,';s将在onclick=";中转义&引用;?

Html 应该,';s将在onclick=";中转义&引用;?,html,onclick,escaping,html-escape-characters,Html,Onclick,Escaping,Html Escape Characters,我还没有找到正确的答案: 是否应在onclick=“…”中转义&(与符号)?(或者说,在每个HTML属性中? 我试过在JSFIDLE和W3C的验证器上运行转义测试和未转义测试,它们都在工作 不带转义 逃脱 单击我 点击我 谢谢 如果以下字符未完成某些HTML实体,则在属性中保留unscaped&是有效的。见: var test = ab< 这将被破坏,而不会像那样转义(请参阅)。因此,如果您完全控制代码,并且确定其中不会出现任何HTML实体,则不应逃避&。它将使您的代

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

是否应在
onclick=“…”
中转义&(与符号)?(或者说,在每个HTML属性中?

我试过在JSFIDLE和W3C的验证器上运行转义测试和未转义测试,它们都在工作

不带转义
逃脱


单击我
点击我

谢谢

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

var test = ab<

这将被破坏,而不会像
那样转义(请参阅)。因此,如果您完全控制代码,并且确定其中不会出现任何HTML实体,则不应逃避
&
。它将使您的代码更干净。但是,如果某个HTML实体可能出现在此处并破坏了所有内容,则必须转义
&

在任何HTML版本中,使用引用
&

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


简而言之,您应该在有疑问时避开它,并且通常避免在属性中使用任何复杂的JavaScript代码。在属性值内使用函数调用是可以的,但任何更复杂的操作都很容易导致混淆。事实上,出于充分的理由,许多人倾向于将所有JavaScript代码放入外部JavaScript文件中;作为一个副作用,请避免类似这样的问题–由将JavaScript嵌入HTML而引起。

如果(1==1&;2==2)
@Mr.Alien它是正确的(在xml/HTML上下文中),但不是好的实践。@bwoebi很有趣,它是有效的,为什么不是好的实践?严格地说,这是唯一的好做法(不是很多人关心,包括我自己)@Mr.Alien-为什么不起作用?这是一个属性值。HTML解析器解析属性值中的实体引用。这种情况发生在内容移交给JS引擎之前。但是,当然,最好的做法是根本不把JS放在属性值中,而是总是使用不引人注目的JS。同意,我总是把JS放在文件中(这个例子连接到我正在开发的一种标记语言)。谢谢
<!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>
var test = ab&lt;