Я отправляю это с помощью AJAX POST:
<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': ¿Dónde habré olvidado... mi memoria?</span></div> </li></ul></li></ul></li></ul>
¿Dónde habré olvidado … mi memoria?
переводит на:
¿Dónde habré ; olvidado... mi memoria?
Мне нужны оригинальные символы в XML, это utf-8, и я не знаю причины этого кодирования 🙁
Самый простой способ исправить это – установить тип кодировки после загрузки 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();
Я решил с этим:
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 в начале
спасибо за ответы 🙂