如何在其中存储xml文件特殊字符值?
问题描述:
我正在使用我的xml文件来存储特殊字符。如何在其中存储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><![CDATA[Hello world]]></text1>
<text2><![CDATA[asassa]]></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");
}
如何保存特殊字符而不需要对它们进行编码?
答
Simplexml的意思很简单,所以没有这个选项。 dom_import_simplexml
可以帮助您从simplexml对象创建domdocument
。
您必须创建DOMDocument的新实例,然后创建CDATA节并将其放入导入的DOMElement节点。
如果您使用php DomDocument
,则必须创建DOMCDATASection并将其附加到text1/text2节点。
如果你没有text1
和text2
节点,您必须先创建它们,然后appencd 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);