1

xml ファイルを使用して特殊文字を保存しています。

これは私の元のファイルです

<root>
  <popups>
        <popup id="1">
            <text1>
                <![CDATA[dynamic text popup 2a]]>
            </text1>
            <text2>
                <![CDATA[dynamic text popup 2b]]>
            </text2>
         </popup>
     </popups>
</root>

今、phpを使って特殊文字を保存すると、そのようになります

<root>
    <popups>
        <popup id="1">
            <text1>&lt;![CDATA[Hello world]]&gt;</text1>
            <text2>&lt;![CDATA[asassa]]&gt;</text2>
        </popup>
    </popups>
</root>

私は次のコードを使用しました:

$this->xmlDocument = simplexml_load_file("xml/conf.xml");
    $pages_node = $this->xmlDocument->xpath("/root/popups/popup[@id=1]");

    $name = $_POST['popup-name'];
    $editor1 = trim(strip_tags($_POST['editor1']));
    $editor2 = trim(strip_tags($_POST['editor2']));
    if (!empty($name)){
        if (!empty($editor1)){ 
            $pages_node[0]->text1 = "<![CDATA[".$editor1."]]>"; 
        }
        if (!empty($editor2)){ 
            $pages_node[0]->text2 =  "<![CDATA[".$editor2."]]>" ;
        }
        $this->xmlDocument->asXml($this->basePath() . "conf/conf.xml");
    }

特殊文字をエンコードせずにそのまま保存するにはどうすればよいですか?

4

1 に答える 1

3

Simplexml は単純であるため、そのようなオプションはありません。simplexml オブジェクトからdom_import_simplexml作成するのに役立ちます。domdocument

DOMDocument の新しいインスタンスを作成してから、CDATA セクションを作成し、インポートした DOMElement ノードに配置する必要があります。

php を使用している場合は、 DOMCDATASectionDomDocumentを作成してtext1 /text2 ノードに追加する必要があります。

ノードがない場合はtext1text2最初にそれらを作成し、次にそれらに cdata ノードを追加し、最後にそれらを に追加する必要がありますpopup

$cdata = $dom->createCDATASection("test");

$text1 = $dom->createElement('text1');
$text1->appendChild($cdata);

$text1 = $dom->createElement('text2');
$text2->appendChild($cdata);

$popupNode->appendChild($text1);
$popupNode->appendChild($text2);
于 2012-06-13T19:41:15.343 に答える