2011-12-07 10 views
1

PHP DOMが自動的にデコードします。たとえば、*は、DOMElementの作成時にデコードされます。これを防ぐ方法はありますか? 1つの解決策は、テキストを前処理して後処理することですが、これはハックのようです。PHP DOMのデコードを防止

例コード:

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

これはxmlのほうが多く、PHPのものではないと思います。代わりに&の代わりに&を使用してください。そうすれば '*' – Matt

答えて

1

のDOMDocument、又はかなりのlibxml、ブーリアンフラグsubstituteEntitiesを有する:

独自。エンティティを置換するかどうか。この属性はDOM仕様の一部ではなく、libxml固有のものです。

ただし、これはあらかじめ定義されているため、ASCIIエンティティでは機能しません。これらは、事前に定義されたエンティティとsubstituteEntitiesそれらの動作には影響を与えませんしている -

行動が正しいので、「未バグ」としてマークされているPHP 5.1.4、用bug report asking for thisありました。詳細は仕様を参照してください。http://www.w3.org/TR/2004/REC-xml-20040204/#sec-predefined-ent

また、時刻libxml2の保存時に整形式の問題を防ぐために必要な定義済みエンティティの変換を強制し、また透過的に置き換えることhttp://xmlsoft.org/entities.html

ノートを参照してください(つまり、DOMツリー内でエンティティ参照要素を生成したり、入力内で参照を見つけるときにreference()SAXコールバックを呼び出すことはありません)。