哪些字符需要在HTML上转义?

它们是否与XML相同,也许再加上空格(&它)?

我发现一些HTML转义字符的巨大列表,但我不认为他们必须逃脱。 我想知道什么需要逃脱。

如果你的文档是unicode,你只需要在文本[ spec ] [ doc ]中跳转和XML相同的文档

& becomes &amp; < becomes &lt; > becomes &gt; 

在属性值中,您还必须转义引号字符[ spec ]

 " becomes &quot; ' becomes &#39; 

如果您的文档是ASCII或其他非Unicode编码,并且您使用的字符不受支持,则需要将其转义。 否则,你没事1

您通常不想逃离空间,因为&nbsp;&nbsp; 不是一个正常的空间,这是一个非破坏性的空间[ wiki ] 。 您可以使用这些而不是普通空格来防止在两个单词之间插入换行符,或者在不自动折叠的情况下插入额外的空格,但不需要经常这样做。


1你没问题,只要你把转义文本插入某个地方,插入普通文本(即不在<style><script>标签内,而不在属性值内)是有意义的。 否则,您必须采取其他预防措施,如daxelrod的回答中 所述,并在Open Web Application Security Project中进行描述 。

这取决于上下文。 HTML中的一些可能的上下文:

  • 文件正文
  • 里面常见的属性
  • 里面的脚本标签
  • 内部风格的标签
  • 还有几个!

请参阅OWASP的跨站脚本预防备忘单 ,特别是“ 为什么我不能只是HTML实体编码不可信数据? ”和“ XSS预防规则 ”部分。 但是,最好阅读整个文档。

基本上有三个主要的字符应该总是在你的HTML和XML文件中转义,所以它们不会与其余的标记交互,所以你可能会期望它们中的两个是synatax包装器,它们是<> ,他们列出如下:

  1) &lt; (<) 2) &gt; (>) 3) &amp; (&) 

我们还可以使用双引号(“)as”和单引号(')作为'

避免将dynamic内容放入<script><style> 。这些规则不适用于它们。 例如,如果必须在a中包含JSON,请在JSON序列化之后将<使用\ x3c,将U + 2028字符replace为\ u2028,将U + 2029replace为\ u2029。

HTML转义字符:完整列表: http : //www.theukwebdesigncompany.com/articles/entity-escape-characters.php

所以你需要逃避<,或者当任何可以开始一个字符引用的时候。 此外,&符号规则是引用属性唯一的这种规则,因为匹配的引号是唯一能够终止的引号。 但是,如果您不想在此处终止属性值,请使用引号。

更改为UTF-8意味着重新保存文件:

在页面中使用UTF-8字符编码意味着您可以避免使用大多数转义字符,只需处理字符。 但是请注意,要更改文档的编码,仅更改页面顶部或服务器上的编码声明是不够的。 您需要以该编码重新保存文档。 为了帮助理解如何使用您的应用程序读取在Web创作应用程序中设置编码。

不可见或模棱两可的字符:

逃生的一个特别有用的作用是表示在演示中不可见或不明确的字符。

一个例子是Unicode字符U + 200F右向左标记(RIGHT-TO-LEFT MARK)。 这个字符可以用来阐明双向文本的方向性(例如,在使用阿拉伯语或希伯来语脚本时)。 然而,它没有graphicsforms,所以很难看到这些字符在文本中的位置,如果它们丢失或被遗忘,在以后的编辑过程中会产生意想不到的结果。 使用(或其数字字符引用等价物)可以很容易地发现这些字符。

U + 00A0 NO-BREAK SPACE是模糊字符的一个例子。 这种types的空间可以防止换行,但在用作字符时看起来就像其他空间一样。 使用很清楚这些空格在文本中出现的位置。