XML文档中需要转义哪些字符?

XML文档中需要转义哪些字符?,xml,escaping,character,Xml,Escaping,Character,XML文档中必须转义哪些字符,或者在哪里可以找到这样的列表?如果使用适当的类或库,它们将为您转义。许多XML问题都是由字符串连接引起的 XML转义字符 只有五个: " &quot; ' &apos; < &lt; > &gt; & &amp; 属性 安全的方法是转义属性中的所有五个字符。但是,字符不需要在属性中转义: <?xml version="1.0"?> <valid attribute="

XML文档中必须转义哪些字符,或者在哪里可以找到这样的列表?

如果使用适当的类或库,它们将为您转义。许多XML问题都是由字符串连接引起的

XML转义字符 只有五个:

"   &quot;
'   &apos;
<   &lt;
>   &gt;
&   &amp;
属性 安全的方法是转义属性中的所有五个字符。但是,
字符不需要在属性中转义:

<?xml version="1.0"?>
<valid attribute=">"/>
" &quot;
' &apos;
同样,如果引号是
,则不需要在属性中转义

<?xml version="1.0"?>
<valid attribute='"'/>

评论 注释中不得转义所有五个特殊字符

<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>

CDATA 所有五个特殊字符不得在节中转义:

<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>


或许这将有助于:

:

在SGML、HTML和XML文档中 称为字符的逻辑结构 数据和属性值包括 字符序列,其中每个 字符可以直接显示 (代表自己),或者可以是 由一系列字符表示 称为字符引用,其中 有两种类型:数值型 字符引用和字符 实体引用。本文列出 角色实体引用 在HTML和XML文档中有效

这篇文章列出了以下五个预定义的XML实体:

quot  "
amp   &
apos  '
lt    <
gt    >
&lt; represents "<"
&gt; represents ">"
&amp; represents "&"
&apos; represents '
&quot; represents "
quot“
放大器&
apos'
中尉<
gt>

除了常见的五个字符[,&,”,和“],我还将转义垂直制表符(0x0B)。它是有效的UTF-8,但不是有效的XML 1.0,甚至是许多库(包括高度可移植(ANSI C)库)根据万维网联盟(w3C)的规范,错过它并以静默方式输出无效的XML。

,除非用作标记分隔符或在注释、处理指令或CDATA节中使用。在所有其他情况下,必须根据下表使用相应的实体或数字引用替换这些字符:

原始字符XML实体替换XML数字替换
>;
“";
&&&38;
“&apos;';


请注意,上述实体也可以在HTML中使用,但XHTML 1.0引入的、未在HTML 4中声明的&apos;除外。因此,为了确保追溯兼容性,标记和属性的转义字符不同

对于标签:

 < &lt;
 > &gt; (only for compatibility, read below)
 & &amp;
发件人:

符号(&)和左尖括号()可以使用 字符串“”,并且为了兼容,必须使用 “”或字符串中出现的字符引用“]]> “在内容中,当该字符串未标记CDATA的结尾时 节

要允许属性值同时包含单引号和双引号, 撇号或单引号字符(')可以表示为“ &载脂蛋白;,双引号字符(“)为“”

节选自:

有五个预定义的实体:

quot  "
amp   &
apos  '
lt    <
gt    >
&lt; represents "<"
&gt; represents ">"
&amp; represents "&"
&apos; represents '
&quot; represents "
大多数控制字符和其他Unicode范围被明确排除在外,这意味着(我认为)它们既不能转义也不能直接出现:


它取决于上下文。对于内容,它是(虽然是一个由三个字符组成的字符串,而不是一个字符)

对于属性值,它是对一个常见的老问题的新的简化答案

简化的XML转义(按优先级排序,100%完成)
  • (90%重要的是要记住)


    • Escape
      接受的答案不正确。最好使用库来转义xml

      如本文所述

      “基本上,控制字符和超出Unicode范围的字符是不允许的。这也意味着禁止调用例如字符实体。”


      如果您只转义这五个字符。您可能会遇到类似

      @Pacerier的问题,我恳请您不要编写自己的XML/HTML转义代码。使用库函数,否则您肯定会错过一个特殊情况。对于换行符,如果您在属性中需要这些字符,您需要使用 ; ;和 ;作为制表符。如果您要执行查找/回复在这些问题上,请记住在其他字符之前进行&;替换。@Doug我正要提到完全相同的事情-否则所有其他被替换的字符都将被损坏,
      之类的内容将更改为
      &;引用:“所有允许的Unicode字符都可以用数字字符引用来表示。”因此,这里有很多不止5个字符。例如:
      AT&;T
      下面是我从原始资料中提炼出来的简明易记的指南()。这里没有一个答案是正确的。您还必须转义XML 1.1中的许多不同控制字符。XML预定义了这五个实体,但它绝对没有指定您不能以文本形式使用这五个字符中的任何一个和&必须到处转义(CDATA除外)。“和”只需在属性值中转义,并且仅当相应的引号字符相同时。和>实际上不必转义。如上所述,<>“&”在用作标记分隔符或在注释、处理指令或CDATA节中使用时,不必转义。i、 e.当您使用<>作为XML标记时,您不会逃避它。注释也是一样(您会在XML文件的注释行中转义&吗?您不需要转义,如果不转义,您的XML仍然有效)。这在@ShaunMcCance
      中有明确规定,如果它在内容中紧跟
      ]
      ,则必须对其进行转义,除非它是指示CDATA节结束的
      ]>
      分隔符的一部分。它不是死灵法师,但@Albz说
      &lt; represents "<"
      &gt; represents ">"
      &amp; represents "&"
      &apos; represents '
      &quot; represents "
      
      &#20013;