2016-10-06 14 views

答えて

1

のみのlibxml2ベースのXMLパーサ(SimpleXMLは、DOM、XMLReaderの)を使用しないことによって。それらはすべて事前定義されたエンティティの置換を強制します。 LibXML2 documentationから

ノート保存時のlibxml2で整形 問題を防止するために必要な 定義済みエンティティの変換を強制し、また透過的に文字を有するものを置き換えること(すなわち それはDOMツリー内にエンティティ参照要素を生成しません。または入力内で参照()SAXコールバックを呼び出す場合は を呼び出します。

XMLパーサーの場合、 '/'と '+'は等しいです。エンティティをXMLに格納するには、&をエスケープする必要があります。あなたはDOMのテキストノードとして、それを作成する場合は、DOMシリアル化のためにそれを行うだろうことがわかります。

$document = new DOMDocument(); 
$document 
    ->appendChild($document->createElement('CATEGORY_TREE')) 
    ->appendChild($document->createTextNode('/Gry/Puzzle/puzzle/')); 
echo $document->saveXml(); 

出力:

<?xml version="1.0"?> 
<CATEGORY_TREE>/Gry&amp;#47;Puzzle/puzzle/</CATEGORY_TREE> 
+0

私は私が言及するのを忘れてしまったと思うが、私は、XMLを解析しています、それを作成しません。 – Grzegorz

+0

私はそれを理解しましたが、XMLパーサーの '/'と '+ 'は同じです。 '/ Gry/Puzzle/puzzle /'は生の値です(少なくともlibxml2ベースのXMLパーサでは)。エンティティとして '+'を読みたい場合は、プログラム/スクリプトがエンティティをエンコードするのが最善の解決策です。それ以外の場合は、既定のエンティティまたは文字列関数(別名独自のパーサーを作成する)で置き換えられないXMLパーサを使用する必要があります。この場合、他の問題に備えて準備をしてください。 LibXML2で置き換えられる理由は次のとおりです。 – ThW

-1

使用がhtml_entity_decode()関数:

<?php 
echo html_entity_decode($node->CATEGORY_TREE); 
関連する問題