PHP DOM自动解码。例如,在创建DOMElement时会解码*
。有没有办法防止这种情况发生。一种解决方案是对文本进行预处理,然后对其进行后处理,但这似乎更像是黑客攻击。
示例代码:
$domDoc = new \DOMDocument();
$domEl = $domDoc->createElement('foo', 'text with * in it');
$domDoc->appendChild($domEl);
echo $domDoc->saveXML();
答案 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回调。)