防止PHP DOM解码

时间:2011-12-07 07:36:49

标签: php xml dom encoding

PHP DOM自动解码。例如,在创建DOMElement时会解码*。有没有办法防止这种情况发生。一种解决方案是对文本进行预处理,然后对其进行后处理,但这似乎更像是黑客攻击。

示例代码:

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

1 个答案:

答案 0 :(得分:1)

DOMDocument,或者更确切地说是libxml,有一个布尔标志substituteEntities:

  

专有。是否替换实体。此属性不是DOM规范的一部分,并且特定于libxml。

但是,这对您的ASCII实体不起作用,因为它们是预定义的。 PHP 5.1.4有一个bug report asking for this,标记为“Not A Bug”,因为

  

行为是正确的 - 这些是预定义的实体,而substituteEntities对它们的行为没有影响。有关详情,请参阅规格:http://www.w3.org/TR/2004/REC-xml-20040204/#sec-predefined-ent

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

  

请注意,在保存时,libxml2会在必要时强制转换预定义实体以防止格式错误问题,并且还会透明地替换具有字符的实体(即,它不会在DOM树中生成实体引用元素或调用引用()在输入中找到它们时的SAX回调。)

相关问题