它们是否与XML相同,可能加上第一个空格(
)?
我发现了一些HTML转义字符的大量列表,但我不认为它们必须被转义。我想知道要转义的需求。
答案 0 :(得分:249)
如果您要在文档中插入文本内容的文本内容 1 ,you typically only need to escape the same characters as you would in XML。在元素内部,这只包含实体转义&符号&
和元素分隔符小于和大于符号<
>
:
& becomes &
< becomes <
> becomes >
在属性值内部,您还必须转义您正在使用的引号字符:
" becomes "
' becomes '
在某些情况下,可以安全地跳过逃避其中一些角色,但我鼓励你在所有情况下逃脱所有这五个角色,以减少犯错误的可能性。
如果您的文档编码不支持您正在使用的所有字符,例如,如果您尝试在ASCII编码的文档中使用表情符号,则还需要避开这些字符。如今,大多数文档都使用完全支持Unicode的UTF-8编码进行编码,但这并不是必需的。
通常,您不应将空格转义为
。
不是正常空间,而是non-breaking space。您可以使用这些而不是普通空格来防止在两个单词之间插入换行符,或者在不自动折叠的情况下插入额外空格,但这通常是一种罕见的情况。除非您有一个需要它的设计约束,否则不要这样做。
1 通过“期望文本内容的位置”,我的意思是应用正常解析规则的元素或引用属性值的内部。例如:<p>HERE</p>
或<p title="HERE">...</p>
。我在上面写的不适用于具有特殊解析规则或含义的内容,例如在脚本或样式标记内部,或作为元素或属性名称。例如:<NOT-HERE>...</NOT-HERE>
,<script>NOT-HERE</script>
,<style>NOT-HERE</script>
或<p NOT-HERE="...">...</p>
。
在这些情况下,规则更复杂,并且更容易引入安全漏洞。 我强烈建议您不要在任何这些位置插入动态内容。我看到有能力的安全感知开发人员团队通过假设他们已正确编码这些值但缺少边缘情况来引入漏洞。通常有一个更安全的替代方法,例如将动态值放在属性中,然后使用JavaScript处理它。
如果必须,请阅读the Open Web Application Security Project's XSS Prevention Rules,以了解您需要牢记的一些问题。
答案 1 :(得分:20)
这取决于具体情况。 HTML中的一些可能的上下文:
请参阅OWASP的Cross Site Scripting Prevention Cheat Sheet,尤其是“Why Can't I Just HTML Entity Encode Untrusted Data?”和“XSS Prevention Rules”部分。但是,最好阅读整篇文档。
答案 2 :(得分:8)
基本上,三个主要字符应始终在HTML和XML文件中进行转义,因此它们不会与其他标记进行交互,因此您可能会发现,它们将是语法包装器,它们是&lt;&gt;,它们列在下面:
1) < (<)
2) > (>)
3) & (&)
我们也可以使用双引号(“)作为”和单引号(')作为&amp;后的
避免将动态内容放在<script>
和<style>
中。这些规则不适用于它们。例如,如果必须在a中包含JSON,请替换&lt;使用\ x3c,U + 2028字符使用\ u2028,使用U + 2029使用\ u2029进行JSON序列化。)
HTML转义字符:完整列表: http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php
所以你需要逃避&lt;,或者&amp;当后面跟着任何可以开始字符引用的东西。另外关于&符号的规则是引用属性的唯一规则,因为匹配的引号是唯一终止一个的引号。但是,如果您不想在那里终止属性值,请转义引号。
更改为UTF-8表示重新保存文件:
对页面使用UTF-8字符编码意味着您可以避免使用 大多数逃脱,只是与角色一起工作。但请注意 更改文档的编码,仅仅更改是不够的 页面顶部或服务器上的编码声明。您 需要以该编码重新保存您的文档。为了帮助理解 如何使用您的应用程序读取在Web中设置编码 创作申请。不可见或含糊不清的字符:
转义的一个特别有用的角色是表示那些字符 在演示中是不可见的或含糊不清的。
一个例子是Unicode字符U + 200F RIGHT-TO-LEFT MARK。这个 字符可用于阐明双向文本中的方向性 (例如,使用阿拉伯语或希伯来语脚本时)。它没有图形形式, 但是,很难看出这些角色在哪里 文本,如果它们丢失或遗忘,它们可能会造成意外 以后编辑时的结果。使用(或其数字字符 相反的参考),使它很容易发现 这些人物。
模糊字符的一个例子是U + 00A0 NO-BREAK SPACE。这个 空间类型可以防止断线,但它看起来就像其他任何一样 用作角色时的空间。使用它 非常清楚文本中出现这样的空格。
答案 3 :(得分:1)
确切的答案取决于具体情况。通常,这些字符不得出现(HTML 5.2 §3.2.4.2.5):
文本节点和属性值必须由Unicode字符组成,不得包含U + 0000字符,不得包含永久未定义的Unicode字符(非字符),并且不得包含空格字符以外的控制字符。该规范包括对Text节点和属性值的确切值的额外约束,具体取决于它们的精确上下文。
对于HTML中的元素,Text内容模型的约束也取决于元素的类型。例如,&#34;&lt;&#34;在textarea元素内部不需要在HTML中进行转义,因为textarea是一个可以逃避的原始文本元素。
这些限制分散在整个规范中。例如,属性值(§8.1.2.3)不得包含ambiguous ampersand,并且(i)为空,(ii)在单引号内(和因此不得在双引号内包含U + 0027 APOSTROPHE字符'
),(iii)(不得包含U + 0022引号标记字符"
)或 (iv)未加引号 - 具有以下限制:
...不得包含任何文字空格字符,任何U + 0022 QUOTATION MARK字符(&#34;),U + 0027 APOSTROPHE字符(&#39;),U + 003D EQUALS SIGN字符(=), U + 003C LESS-THAN SIGN字符(&lt;),U + 003E GREATER-THAN SIGN字符(&gt;)或U + 0060 GRAVE ACCENT字符(`),不能是空字符串。