2011-01-07 6 views
3

ich dies mit AJAX POST senden:PHP XML DOM übersetzt Sonderzeichen zu &#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> 

ich diese XML zu erstellen:

 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(); 
    } 

und ich bekomme diese:

<?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 mémoria?

übersetzt:

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

I ursprünglichen Zeichen in der XML benötigen, sind diese utf-8 gültig und ich weiß nicht, den Grund für diese kodieren :(

+0

DOM ignoriert, wie Sie sofort reagieren Es wird beim Laden von Markup verwendet und fällt auf das zurück, was im Markup angegeben ist. – Gordon

+0

mögliches Duplikat von [php: benutze DomDocument immer, wenn ich versuche, UTF-8 zu schreiben, schreibt es die hexadezimale Schreibweise davon.] (Http://stackoverflow.com/questions/3575109/php-using-domdocument-wise-wetrytry) -to-write-utf-8-es-schreibt-die-hexadezimal-no) – Gordon

Antwort

5

Der einfachste Weg zu beheben dies ist den Codierungstyp nach Sie die XML geladen haben zu setzen:

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

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

Sie können es auch beheben, indem Sie eine XML-Deklaration an der beg setzen Inning Ihre Daten:

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

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

es funktioniert auch danke – ZiTAL

0

ich mit diesem gelöst:

 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(); 

Hinzufügen der:

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

zum XML am Anfang

Dank für Antworten :)