Javascript HTML属性中的引号会破坏布局
我的网站有用户生成的内容。我注意到,如果用户在某些文本中有引号,然后我在HTML属性中显示该文本,那么IE中的布局就会出错Javascript HTML属性中的引号会破坏布局,javascript,html,dom,html-entities,Javascript,Html,Dom,Html Entities,我的网站有用户生成的内容。我注意到,如果用户在某些文本中有引号,然后我在HTML属性中显示该文本,那么IE中的布局就会出错 <a href="link.html" title="user "description" of link">Hello</a> 为什么会这样?JS和纯HTML版本都有相同的预期结果,但只有JS没有破坏IE。幕后发生了什么 顺便说一句,我会从所有用户输入中剥离_tags()和清除XSS攻击,但我不会剥离所有HTML实体,因为我使用了大量表单文本输
<a href="link.html" title="user "description" of link">Hello</a>
为什么会这样?JS和纯HTML版本都有相同的预期结果,但只有JS没有破坏IE。幕后发生了什么
顺便说一句,我会从所有用户输入中剥离_tags()和清除XSS攻击,但我不会剥离所有HTML实体,因为我使用了大量表单文本输入框来显示用户生成的文本。表单元素直接显示HTML实体,看起来很难看。您需要转义用户指定的所有输出(使用实体)。DOM方法会自动执行此操作。您需要转义用户指定的所有输出(使用实体)。DOM方法会自动执行此操作。我不知道您是如何处理用户生成的内容的,但是您可以使用replace函数来清理输入,例如
string.replace(“\”,”)
我不知道您是如何处理用户生成的内容的,但是您可以使用replace函数来清理输入,比如字符串。replace(“\”,”)
您的问题的答案:“为什么是这样”是因为在JavaScript示例中,用单引号设置title属性。因此,用户生成的字符串中的双引号已经转义
在标记示例中,在title属性中使用的文本周围加上单引号可能是解决渲染问题的一种方法
但是,您的HTML属性应该使用双引号,因此您最好使用实体,正如@elusive在其回答中所建议的那样。您的问题的答案:“为什么是这样”是因为在JavaScript示例中,使用单引号设置title属性。因此,用户生成的字符串中的双引号已经转义 在标记示例中,在title属性中使用的文本周围加上单引号可能是解决渲染问题的一种方法
但是,您的HTML属性应该用双引号括起来,因此您最好使用@elusive在其回答中建议的实体。这种行为在另一个浏览器上可以复制吗?这是无效的标记,请询问Validator博士这种行为在另一个浏览器上可以复制吗?这是无效的标记,询问Validator博士,请定义术语“转义”和“实体”。使用DOM方法可以做到吗?你是要逃逸每个字符,还是仅仅是引号?@Robert Harvey:还有。您需要转义在HTML中具有特殊含义的所有字符。是的,使用DOM方法可以做到。请定义术语“转义”和“实体”。使用DOM方法可以做到吗?你是要逃逸每个字符,还是仅仅是引号?@Robert Harvey:还有。您需要转义在HTML中具有特殊含义的所有字符。是的,使用DOM方法就可以了。我使用vb escape来表示双引号。我改变了这个例子,虽然我也不确定这是否正确。我使用vb escape来表示双引号。我改变了这个例子,虽然我也不确定这是否正确。
$$('body').first().appendChild(
new Element(
'a', {
title: 'user "description" of link',
href: 'link.html'
}
).update('Hello')
);