如何在其中存储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>&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"); 
    } 

如何保存特殊字符而不需要对它们进行编码?

Simplexml的意思很简单,所以没有这个选项。 dom_import_simplexml可以帮助您从simplexml对象创建domdocument

您必须创建DOMDocument的新实例,然后创建CDATA节并将其放入导入的DOMElement节点。

如果您使用php DomDocument,则必须创建DOMCDATASection并将其附加到text1/text2节点。

如果你没有text1text2节点,您必须先创建它们,然后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);