2011-01-07 51 views
3

我送这与AJAX POST:PHP的XML DOM转换特殊字符来&#xYY;

<li><ul class "zone zCentral ui-sortable"><li><ul class="region rCol3 ui-sortable"><li class="" style=""><div><span class="tc tc_video">574081</span> <span>video: 'Mundo.Hoy': ¿Dónde habré olvidado... mi memoria?</span></div></li></ul></li></ul></li> 

我这样做是为了创建XML:

 header('Content-type: text/html; charset=utf-8');  
    if(isset($_POST) && isset($_POST['data'])) 
    {   
     $data = '<ul id="zone_container" class="ui-sortable">'; 
     $data .= $_POST['data']; 
     $data .= '</ul>';       

     $dom = new DOMDocument('1.0', 'utf-8'); 
     $dom->loadXML($data); 

     echo $dom->saveXML();      
     exit(); 
    } 

,我得到这样的:

<?xml version="1.0"?> 
<ul id="zone_container" class="ui-sortable"> 
    <li><ul class="zone zCentral ui-sortable"><li><ul class="region rCol3   ui-sortable"><li class="" style=""><div><span class="tc tc_video">574081</span>  <span>video: 'Mundo.Hoy': &#xBF;D&#xF3;nde habr&#xE9; olvidado... mi memoria?</span></div> </li></ul></li></ul></li></ul> 

¿Dóndehabréolvidado ... mi memoria?

翻译为:

&#xBF;D&#xF3;nde habr&#xE9 ; olvidado... mi memoria? 

我需要原始字符在XML,这些都是UTF-8有效的,我不知道这个编码:(

+0

DOM会不顾你如何即时当加载标记并回退到标记中给出的内容时,它会引用它。 – Gordon 2011-01-07 11:59:17

+0

[php:使用DomDocument,当我尝试写UTF-8它写十六进制表示法]时可能重复。(http://stackoverflow.com/questions/3575109/php-using-domdocument-whenever-i-try -to-write-utf-8-it-writes-the-hexadecimal-no) – Gordon 2011-01-07 12:01:56

回答

5

解决的最简单方法的原因这是设置编码类型后您已加载XML:

$dom = new DOMDocument(); 
$dom->loadXML($data); 
$dom->encoding = 'utf-8'; 

echo $dom->saveXML();      
exit(); 

您也可以通过将一个XML声明在乞求修复数据的局:

$data = '<?xml version="1.0" encoding="utf-8"?>' . $data; 
$dom = new DOMDocument(); 
$dom->loadXML($data); 

echo $dom->saveXML(); 
exit(); 
0

我解决了这一点:

 header('Content-type: text/html; charset=utf-8');  
    if(isset($_POST) && isset($_POST['data'])) 
    {   
     $data = '<?xml version="1.0" encoding="utf-8"?>'; 
     $data .= '<ul id="zone_container" class="ui-sortable">'; 
     $data .= $_POST['data']; 
     $data .= '</ul>';     

     $dom = new DOMDocument('1.0', 'utf-8'); 
     $dom->loadXML($data); 

     echo $dom->saveXML();      
     exit(); 

添加:在开始

  $data = '<?xml version="1.0" encoding="utf-8"?>'; 

到XML

感谢答复:)