首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在HTML中哪些字符需要转义?

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

Stack Overflow用户
提问于 2011-09-12 07:24:07
回答 4查看 489.7K关注 0票数 325

它们是不是和XML一样,也许加上了空格( )?

我发现了一些很大的HTML转义字符列表,但我不认为它们必须转义()。我想知道需要对进行哪些转义。

EN

回答 4

Stack Overflow用户

发布于 2011-09-12 09:06:36

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

  • document body
  • inside common attributes
  • inside脚本标记
  • inside style标记
  • 还有更多内容!

请参阅OWASP的Cross Site Scripting Prevention Cheat Sheet,特别是"Why Can't I Just HTML Entity Encode Untrusted Data?“和"XSS Prevention Rules”部分。但是,最好是阅读整个文档。

票数 22
EN

Stack Overflow用户

发布于 2017-05-02 20:42:10

基本上,有三个主要字符,它们应该总是在你的超文本标记语言和可扩展标记语言文件中转义,这样它们就不会与其余的标记交互,所以正如你可能预期的那样,其中两个字符将是语法包装器,它们是<>,如下所示:

代码语言:javascript
复制
 1)  &lt; (<)
    
 2)  &gt; (>)
    
 3)  &amp; (&)

我们也可以使用双引号(")作为“,使用单引号(')作为&apos

避免将动态内容放在<script>中,并且<style>.These规则不适用于它们。例如,如果必须在a中包含JSON,请在JSON序列化后将<替换为\x3c,将U+2028字符替换为\u2028,将U+2029替换为\u2029。)

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

因此,您需要转义<,或者&,后面跟任何可能开始字符引用的内容。此外,带引号的属性的规则也是唯一这样的规则,因为匹配的引号是唯一可以终止引号的规则。但是,如果您不想在此处终止属性值,请转义引号。

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

不可见或不明确的字符:

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

一个例子是Unicode字符U+200F从右到左的标记。此字符可用于阐明双向文本中的方向性(例如,当使用阿拉伯语或希伯来语脚本时)。但是,它没有图形形式,因此很难看到这些字符在文本中的位置,如果它们丢失或忘记,可能会在以后的编辑过程中产生意想不到的结果。相反,使用‏(或其等效的数字字符引用‏)可以非常容易地识别这些字符。

不明确字符的一个例子是U+00A0无中断空格。这种类型的空格可以防止换行,但在用作字符时,它看起来就像任何其他空格一样。使用使文本中出现这些空格的位置变得非常清楚。

票数 11
EN

Stack Overflow用户

发布于 2018-04-11 10:27:51

确切的答案取决于上下文。通常,这些字符不能出现(HTML 5.2 §3.2.4.2.5):

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

对于HTML中的元素,文本内容模型的约束也取决于元素的类型。例如,在HTML中不需要对textarea元素中的"<“进行转义,因为textarea是一个可避开的原始文本元素。

这些限制分散在整个规范中。例如,属性值(§8.1.2.3)不能包含ambiguous ampersand,并且(i)为空,(ii)在单引号内(因此不能包含U+0027撇号字符'),(iii)在双引号内(不能包含U+0022引号字符"),或(iv)不带引号,但有以下限制:

...不得包含任何文字空格字符、任何U+0022引号字符(")、U+0027撇号字符(')、U+003D等号字符(=)、U+003C小于号字符(<)、U+003E大于号字符(>)或U+0060重音字符(`),并且不能为空字符串。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7381974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档