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

问题描述 投票:244回答:4

它们与XML相同吗,也许加上空格( )?

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

html html-entities html-encode html-escape-characters
4个回答
305
投票
如果要在文档中期望文本内容的位置插入文本内容

1,则为you typically only need to escape the same characters as you would in XML。在元素内部,这仅包括实体转义与号&和元素定界符小于和大于符号< >

& becomes &amp; < becomes &lt; > becomes &gt;
在属性值内,您还必须转义使用的引号字符:

" becomes &quot; ' becomes &#39;

在某些情况下,跳过某些字符是安全的,但我鼓励您在所有情况下都逃避全部五个字符,以减少犯错的可能性。

[如果您的文档编码不支持您正在使用的所有字符,例如,如果您尝试在ASCII编码的文档中使用表情符号,则还需要转义这些字符。如今,大多数文档都是使用完全支持Unicode的UTF-8编码进行编码的,而无需这样做。

通常,您不应将空格作为&nbsp;转义。 &nbsp;不是普通空间,而是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以帮助理解您需要牢记的一些问题。

21
投票
取决于上下文。 HTML中的一些可能的上下文:

    文档正文
  • 内部共有属性
  • 内部脚本标签
  • 内部样式标签
  • 还有几个!
  • 请参见OWASP的Cross Site Scripting Prevention Cheat Sheet,尤其是“ Why Can't I Just HTML Entity Encode Untrusted Data?”和“ XSS Prevention Rules”部分。但是,最好阅读整个文档。

  • 9
    投票
    基本上,有[[三个主要字符]应该始终在HTML和XML文件中转义,因此它们不会与其余标记交互,因此您可能希望,其中两个会成为标记。语法包装器,它们是<>,它们列出如下:

    1) &lt; (<) 2) &gt; (>) 3) &amp; (&) [我们也可以将双引号(“)用作”,将单引号(')用作'

    [避免在<script><style>中放入动态内容。这些规则不适用于它们。例如,如果必须在JSON中包含JSON,则在JSON序列化后,将

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

    因此,如果后面有可以开始字符引用的所有内容,则需要转义

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

    不可见或不明确的字符:

    对于转义符特别有用的作用是代表在显示中不可见或不明确。

    一个例子是Unicode字符U + 200F RIGHT-TO-LEFT MARK。这个字符可用于阐明双向文本中的方向性(例如,使用阿拉伯语或希伯来语脚本时)。它没有图形形式,但是,因此很难看到这些字符在文字,如果它们丢失或遗忘,它们可能会导致意外结果在以后的编辑中。使用(或数字字符)等效参考)使其非常容易发现这些字符。

    歧义字符的示例是U + 00A0 NO-BREAK SPACE。这个空间类型可以防止换行,但是它看起来和其他任何东西一样用作字符时的空格。使用使其非常清楚这些空格在文本中的位置。


    3
    投票

    文本节点和属性值必须包含Unicode字符,不能包含U + 0000字符,不能包含永久未定义的Unicode字符(非字符),并且不能包含空格字符以外的控制字符。此规范包括对Text节点的精确值和属性值的附加约束,具体取决于它们的精确上下文。

    对于HTML中的元素,文本内容模型的约束还取决于元素的类型。例如,textarea元素内的“

    这些限制分散在整个规范中。例如,属性值(§8.1.2.3)不得包含ambiguous ampersand,并且必须在单引号内为

    (i)空,

    (ii)(因此不得包含U + 0027 APOSTROPHE字符[ C0]),(iii)用双引号引起来(必须不包含U + 0022引号字符')或(iv)不加引号-具有以下限制:

    ...不得包含任何文字空格字符,任何U + 0022引号字符(“),U + 0027撇号字符('),U + 003D等号字符(=),U + 003C小于号字符()或U + 0060 GRAVE ACCENT字符(`),并且不能为空字符串。
    © www.soinside.com 2019 - 2024. All rights reserved.