2014-02-26 24 views
0

我遇到了一个问题,当我存储$ msgIn(string)并且它包含像&符或货币值之类的smybols时,它将不会保存并在符号之前切断,是有一种方法可以告诉它在CDATA标签中包装消息?通过PHP向CDATA添加节点问题

$xml = @simplexml_load_file($this->currentChatLogFile); 
$message = $xml->messages->addChild("message", $msgIn); 
$message->addAttribute("timestamp", date("U")); 
$message->addAttribute("pid", $uidIn); 
$message->addAttribute("poster", $uname); 
$message->addAttribute("ip", $_SERVER['REMOTE_ADDR']); 
$xml->saveXML($this->currentChatLogFile); 

目前得到这个当我提交Test & test2

`<?xml version="1.0" encoding="UTF-8"?> 
<chatlog created="1393450231"> 
<messages> 
<message timestamp="1393453404" pid="16" poster="core" ip="127.0.0.1">Test </message> 
</messages> 
</chatlog>` 

任何建议/帮助非常感谢。

回答

2
<?php 
    class ExSimpleXML extends SimpleXMLElement { 
     public function addCData($cdata_text) { 
     $node = dom_import_simplexml($this); 
     $no = $node->ownerDocument; 
     $node->appendChild($no->createCDATASection($cdata_text)); 
     } 
    } 




    $xml = new ExSimpleXML('<root/>'); 
    $xml->item= NULL; 
    $xml->item->addCData('CDATA TEST'); 
    $xml->saveXML("file.xml"); 

?> 

例如基于 http://www.php.net/manual/pt_BR/simplexmlelement.addchild.php