Php (某些)HTML实体破坏XSL引擎是否正常?
我有一个用PHP动态生成的XML文档。我将此XML与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
¥代码>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代码,我们可能会更好地帮助您。例如,您使用什么方法来序列化?