2011-01-07 3 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ónde habré olvidado ... mi memoria?

переводит:

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

мне нужно оригинальные символы в XML, это UTF-8 действует и я не знаю причину этого закодировать :(

+0

DOM проигнорирует, как вы мгновенно при загрузке разметки и возвращении к тому, что указано в разметке. – Gordon

+0

Возможный дубликат [php: использование DomDocument, когда я пытаюсь написать UTF-8, он записывает шестнадцатеричное его обозначение.] (Http://stackoverflow.com/questions/3575109/php-using-domdocument-whenever-i-try -to-write-utf-8-it-write-the-hexadecimal-no) – Gordon

ответ

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

он тоже работает – ZiTAL

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 в начале

спасибо за ответы :)