Php <;![CDATA[]>;在XML标记中

Php <;![CDATA[]>;在XML标记中,php,xml,parsing,xml-parsing,cdata,Php,Xml,Parsing,Xml Parsing,Cdata,我有一个用PHP文件解析的XML文件,我必须包含很多需要CDATA才能正确解析的“特殊”字符 有没有一种方法可以告诉我的PHP文件读取所有标记,就好像在请求和标记的位置有一个块一样 现在,对于每个XML标记,我必须创建一个CDATA块: <tag><![CDATA[blah.......]]></tag> 有没有一种方法可以设置它,使我不必每次都在XML中为evey标记编写CDATA?CDATA是个坏主意!它有很多问题。相反,您应该为每个值使用htmls

我有一个用PHP文件解析的XML文件,我必须包含很多需要CDATA才能正确解析的“特殊”字符

有没有一种方法可以告诉我的PHP文件读取所有标记,就好像在请求和标记的位置有一个块一样

现在,对于每个XML标记,我必须创建一个CDATA块:

<tag><![CDATA[blah.......]]></tag>


有没有一种方法可以设置它,使我不必每次都在XML中为evey标记编写CDATA?

CDATA是个坏主意!它有很多问题。相反,您应该为每个值使用
htmlspecialchars()

好的……不要投反对票!这里是CDATA的一些问题

首先,简单的一点是:你不能逃避
]>
序列。这似乎不是什么大问题,但如果您选择任何“转义字符序列”的方法,您确实应该选择每个序列都可以转义的方法

现在来看一个大问题:CDATA经常被用作将Latin1数据注入UTF-8文档的黑客手段。人们认为,我在XML中有一个转义问题,所以我将使用CDATA作为解决方法

在CDATA中,允许任何字符序列,并且XML文档的指定字符编码在此块中不再相关。然而,任何类型的文本实际上都有一个字符编码,而不是转换编码(你应该做什么),你通过将其包装在CDATA中来“破解”它

这也是一种不可行的方式来编码二进制数据,因为控制字符仍然是不允许的

所以,CDATA有点像是“这里是龙”,这里有一些字节不是在指定的编码中,我只能告诉你没有控制字符

这对消费者来说是个坏主意,因为所有关于字符编码的假设现在都不存在了

以下是一些链接:

  • 奖励:消费者方面遇到问题的人:

    • CDATA是个坏主意!它有很多问题。相反,您应该为每个值使用
      htmlspecialchars()

      好的。。不要投反对票!以下是CDATA的一些问题

      首先,简单的一点是:你不能逃避
      ]>
      序列。这似乎不是什么大问题,但如果您选择任何“转义字符序列”的方法,您确实应该选择每个序列都可以转义的方法

      现在来看一个大问题:CDATA经常被用作将Latin1数据注入UTF-8文档的黑客手段。人们认为,我在XML中有一个转义问题,所以我将使用CDATA作为解决方法

      在CDATA中,允许任何字符序列,并且XML文档的指定字符编码在此块中不再相关。然而,任何类型的文本实际上都有一个字符编码,而不是转换编码(你应该做什么),你通过将其包装在CDATA中来“破解”它

      这也是一种不可行的方式来编码二进制数据,因为控制字符仍然是不允许的

      所以,CDATA有点像是“这里是龙”,这里有一些字节不是在指定的编码中,我只能告诉你没有控制字符

      这对消费者来说是个坏主意,因为所有关于字符编码的假设现在都不存在了

      以下是一些链接:

      • 奖励:消费者方面遇到问题的人:

      您没有明确告诉我们您指的是什么“特殊字符”,但我假设您指的是某种重音字符,或非拉丁字母表中的字符,等等

      在大多数情况下,问题可以通过使用UTF-8字符集输出文档来解决

      在其余的情况下,可以通过使用XML实体来解决这个问题——例如
       


      这两种方法都比使用CDATA更好。

      您没有明确告诉我们您指的是什么“特殊字符”,但我假设您指的是某种重音字符,或非拉丁字母表中的字符,等等

      在大多数情况下,问题可以通过使用UTF-8字符集输出文档来解决

      在其余的情况下,可以通过使用XML实体来解决这个问题——例如
       


      这两种解决方案都比使用CDATA好。

      如果您不解释CDATA不好的原因,这并不是一个真正有用的答案。(顺便说一句,不是我的-1。我只是在猜测你为什么会得到-1)。“CDATA是个坏主意!它有很多问题。”你能再详细一点吗?在问答网站上,告诉人们“谷歌搜索”还有很多需要改进的地方。如果你知道自己在做什么,XML文件中的非HTML实体字符就没有问题。CDATA是以XML存储内容的方式。如果你有相反的证据,就拿出证据。@Pekka:我真的认为避免CDATA是常识。。显然,notCDATA并不意味着您可以使用任何字符编码。任何使用它们转储无效字符数据的人都会生成无效的XML。但这是人们愚蠢的过错。如果使用得当,没有理由不使用CDATA分区。不过,维基链接的最后一段很有意义;但是,请注意,许多HTML实体在XML中是无效的。本质上应该转义的是HTML特殊字符
      &
      和引号。我冒昧地在你的回答中改变了这一点(假设你的意思是这样的),如果你不解释为什么CDATA不好,这不是一个真正有用的回答。(顺便说一句,不是我的-1。我只是在猜测你为什么会得到-1)。“CDATA是个坏主意!它有很多问题。”你能再详细一点吗?在问答网站上,告诉人们“谷歌搜索”还有很多需要改进的地方。如果你知道自己在做什么,XML文件中的非HTML实体字符就没有问题。CDATA是以XML存储内容的方式。如果你有相反的证据,就拿出来。@Pekka:I