Javascript HTML属性中的引号会破坏布局

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实体,因为我使用了大量表单文本输

我的网站有用户生成的内容。我注意到,如果用户在某些文本中有引号,然后我在HTML属性中显示该文本,那么IE中的布局就会出错

<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')
);