Php (某些)HTML实体破坏XSL引擎是否正常?

Php (某些)HTML实体破坏XSL引擎是否正常?,php,xml,xslt,domdocument,html-entities,Php,Xml,Xslt,Domdocument,Html Entities,我有一个用PHP动态生成的XML文档。我将此XML与XSL文件一起使用。在我从数据库条目中获取日元货币符号(¥)之前,它一直工作正常。此符号转义到¥HTML实体。此实体正在破坏XSL/XML引擎: 警告:DOMDocument::load()[DOMDocument.load]:实体“yen”不是 在%file.xml%中定义,第%2%行的%file.php%中的第%1%行 当¥实体不在那里,一切正常 是否有什么我没有做/包括/配置以获得此错误?与¥由于XML没有预定义的&ye

我有一个用PHP动态生成的XML文档。我将此XML与XSL文件一起使用。在我从数据库条目中获取日元货币符号(¥)之前,它一直工作正常。此符号转义到
¥HTML实体。此实体正在破坏XSL/XML引擎:

警告:DOMDocument::load()[DOMDocument.load]:实体“yen”不是 在%file.xml%中定义,第%2%行的%file.php%中的第%1%行

¥实体不在那里,一切正常


是否有什么我没有做/包括/配置以获得此错误?

¥由于XML没有预定义的
¥,您的XML将变成格式不正确的XML实体。
¥
的有效转义版本为
¥

¥由于XML没有预定义的
¥,您的XML将变成格式不正确的XML实体。
¥
的有效转义版本为
¥
XML只识别少数字符实体:
。除非您自己为实体添加定义,否则任何其他内容都将是解析错误:
XML只识别少数字符实体:
&
&apos。除非您自己为实体添加定义,否则任何其他内容都将是解析错误:

在使用XML时,默认情况下定义的实体只有
&
。任何其他实体都需要在DTD中定义

XSL在其doctype中不定义任何其他实体。即使要转换为(x)HTML,也没有定义其他实体,因为您的主要doctype是用于XSL的

您可以添加大量声明以在DTD中定义它们,但这意味着使用自定义DTD,这并不理想,而且需要进行大量维护工作


坦率地说,解决这个问题最简单的方法就是对所有内容使用数字实体代码。这是一种痛苦,但它可以在任何XML方言中工作,而不需要对DTD进行任何攻击。

当涉及到使用XML时,默认情况下定义的唯一实体是
&
。任何其他实体都需要在DTD中定义

XSL在其doctype中不定义任何其他实体。即使要转换为(x)HTML,也没有定义其他实体,因为您的主要doctype是用于XSL的

您可以添加大量声明以在DTD中定义它们,但这意味着使用自定义DTD,这并不理想,而且需要进行大量维护工作


坦率地说,解决这个问题最简单的方法就是对所有内容使用数字实体代码。这很痛苦,但它可以在任何XML方言中工作,而不需要对DTD进行任何攻击。

是的,我知道,但为什么DOMDocument会自动转义?是的,我知道,但为什么DOMDocument会自动转义?我的问题是,DOMDocument::createTextNode方法似乎会自动转义到¥;这样就打破了以后的过程…@Alex:你可能想编辑你的问题,以澄清你在问为什么DOMDocument会输出这个实体。。。大多数人认为您是在问为什么XML中不允许使用此实体。我的问题是DOMDocument::createTextNode方法似乎正在自动转义为¥;这样就打破了以后的过程…@Alex:你可能想编辑你的问题,以澄清你在问为什么DOMDocument会输出这个实体。。。大多数人认为您是在问为什么XML中不允许使用此实体。您的问题标题的答案是肯定的,但根据您的评论,这并不是您想要了解的。如果您发布一些输出日元实体的PHP代码,我们可能会更好地帮助您。例如,您使用什么方法进行序列化?问题标题的答案是肯定的,但根据您的评论,这并不是您想要了解的。如果您发布一些输出日元实体的PHP代码,我们可能会更好地帮助您。例如,您使用什么方法来序列化?