我还没有找到合适的答案:
应该& (&符号)在onclick="..."
中被转义? (或者就此而言,在每个HTML属性中?)
我试过在jsFiddle和W3C的验证器上运行转义和非转义测试,两者都正在运行......
<div onclick="if (1==1 && 2==2) alert('hello there');">Without escape</div>
<div onclick="if (1==1 && 2==2) alert('hello there');">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 && 2==2) alert('hello there');">Click me</div>
</body></html>
谢谢!
答案 0 :(得分:2)
如果以下字符未完成某些HTML实体,则将未转义的&
保留在属性中是有效的。参见:
var test = ab<
如果不将&
转换为&
(参见this fiddle),我们就会将其删除。因此,如果您完全控制了代码,并确信其中不会显示任何HTML实体,则不应该转义&
。它会让你的代码更清晰。但如果有可能某些HTML实体出现在这里并破坏了所有内容,则必须逃避&
。
答案 1 :(得分:1)
在任何HTML版本中,使用属性值中的引用&
来表示符号字符“&amp;”始终是正确的。
使用它是否也正确取决于上下文和HTML版本。在任何XHTML风格中,它都是永远不正确的。在其他方面,它主要取决于下一个字符的种类,但是 - 如果它是名称字符 - 也取决于HTML版本和属性的性质(URL值属性的处理方式不同)。
简短的故事是,如果有疑问,你应该逃避它,并且通常避免在属性中使用任何复杂的JavaScript代码。在属性值中使用函数调用是可以的,但任何更复杂的东西都容易导致混淆。实际上,很多人赞成将所有JavaScript代码放入外部JavaScript文件中,原因很多;作为副作用,它可以避免这样的问题 - 这是由于将JavaScript嵌入到HTML中引起的。