У меня возникли сложности с классом PHP DOM.
Я делаю сценарий карты сайта, и мне нужно, чтобы вывод $ doc-> saveXML () был похож на
<?xml version="1.0" encoding="UTF-8"?>
<root>
<url>
<loc>http://www.somesite.com/serviços/redesign</loc>
</url>
</root>
или
<?xml version="1.0" encoding="UTF-8"?>
<root>
<url>
<loc>http://www.somesite.com/serviços/redesign</loc>
</url>
</root>
но я получаю:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<url>
<loc>http://www.somesite.com/servi&#xE7;os/redesign</loc>
</url>
</root>
Это шкаф, который я мог получить, используя функцию замены именованных сущностей.
Мне также удалось воспроизвести
<?xml version="1.0" ?>
<root>
<url>
<loc>http://www.somesite.com/servi&#xE7;os/redesign</loc>
</url>
</root>
Но без указанной кодировки.
Лучшее решение (как я думаю, код должен быть написан) было бы:
<?php
$myArray = array();
// do some stuff to populate the with URL strings
$doc = new DOMDocument('1.0', 'UTF-8');
// here we modify some property. Maybe is the answer I am looking for...
$urlset = doc->createElement("urlset");
$urlset = $doc->appendChild($urlset);
foreach($myArray as $address) {
$url = $doc->createElement("url");
$url = $urlset->appendChild($url);
$loc = $doc->createElement("loc");
$loc = $url->appendChild($loc);
$valueContent = $doc->createTextNode($value);
$valueContent = $loc->appendChild($address);
}
echo $doc->saveXML();
?>
Примечания:
- Заголовок ответа сервера содержит кодировку UTF-8;
- PHP-скрипт сохраняется в UTF-8;
- прочитанные URL - это строки UTF-8;
- Вышеуказанный скрипт содержит объявление кодировки в конструкторе DOMDocument и не использует никаких функций преобразования, таких как htmlentities, urlencode, utf8_encode ...
Я попытался изменить свойства DOMDocument DOMDocument :: $ resolExternals и DOMDocument :: $ substituteEntities значения. Ни одна комбинация не сработала.
И да, я знаю, что могу выполнить весь процесс без указания набора символов в конструкторе DOMDocument, выгрузить содержимое строки в переменную и выполнить очень простую подстановку строк с помощью функций замены строк. Это работает. Но я хотел бы знать, где я проскальзываю, как это можно сделать с помощью встроенных API и настроек или даже если это возможно.
Заранее спасибо.