2011-12-07 53 views
1

PHP DOM自动解码。例如,*在创建DOMElement时被解码。有没有办法来防止这一点。一种解决方案是对文本进行预处理并对后处理进行后处理,但这看起来更像是一种破解。防止PHP DOM解码

示例代码:

$domDoc = new \DOMDocument(); 
$domEl = $domDoc->createElement('foo', 'text with * in it'); 
$domDoc->appendChild($domEl); 
echo $domDoc->saveXML(); 
+0

我认为这是更多的xml认为,而不是一个真正的PHP的东西。试着用&来代替&,所以你有'*' – Matt

回答

1

DOM文档,或者更确切地说libxml的,具有一个布尔标志substituteEntities:

专有。是否替代实体。这个属性不是DOM规范的一部分,并且是针对libxml的。

但是,这不适用于您的ASCII实体,因为它们是预定义的。有人支持PHP 5.1.4,其中被标记为“不是一个错误”一bug report asking for this,因为

行为是正确的 - 这是预先定义的实体和substituteEntities对他们的行为没有任何影响。看规格的更多信息:http://www.w3.org/TR/2004/REC-xml-20040204/#sec-predefined-ent

另见http://xmlsoft.org/entities.html

需要注意的是,在节省时间的libxml2强制执行预定义的实体的转换如果需要防止良构的问题,也将透明地取代那些带有字符(即它不会在DOM树中生成实体引用元素,或者在输入中找到它们时调用reference()SAX回调函数)。