哪些字符需要在HTML上转义?
它们是否与XML相同,也许再加上空格(&它)?
我发现一些HTML转义字符的巨大列表,但我不认为他们必须逃脱。 我想知道什么需要逃脱。
如果你的文档是unicode,你只需要在文本[ spec ] [ doc ]中跳转和XML相同的文档 :
& becomes & < becomes < > becomes >
在属性值中,您还必须转义引号字符[ spec ] :
" becomes " ' becomes '
如果您的文档是ASCII或其他非Unicode编码,并且您使用的字符不受支持,则需要将其转义。 否则,你没事1 。
您通常不想逃离空间,因为
。
不是一个正常的空间,这是一个非破坏性的空间[ wiki ] 。 您可以使用这些而不是普通空格来防止在两个单词之间插入换行符,或者在不自动折叠的情况下插入额外的空格,但不需要经常这样做。
1你没问题,只要你把转义文本插入某个地方,插入普通文本(即不在<style>
或<script>
标签内,而不在属性值内)是有意义的。 否则,您必须采取其他预防措施,如daxelrod的回答中 所述,并在Open Web Application Security Project中进行描述 。
这取决于上下文。 HTML中的一些可能的上下文:
- 文件正文
- 里面常见的属性
- 里面的脚本标签
- 内部风格的标签
- 还有几个!
请参阅OWASP的跨站脚本预防备忘单 ,特别是“ 为什么我不能只是HTML实体编码不可信数据? ”和“ XSS预防规则 ”部分。 但是,最好阅读整个文档。
基本上有三个主要的字符应该总是在你的HTML和XML文件中转义,所以它们不会与其余的标记交互,所以你可能会期望它们中的两个是synatax包装器,它们是<> ,他们列出如下:
1) < (<) 2) > (>) 3) & (&)
我们还可以使用双引号(“)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的空间可以防止换行,但在用作字符时看起来就像其他空间一样。 使用很清楚这些空格在文本中出现的位置。