У меня есть XML/SVG. Часть этого:
<text id="p6_segmentMainLabel5-outer" class="p6_segmentMainLabel-outer" style="font-size: 11px; font-family: arial; fill: rgb(170, 170, 170);">BüG [349]</text>
Внутри него есть особый характер. Как очистить весь XML таких специальных символов, не избегая всех "<" и ">" до <и>? Я мог бы создать массив всех символов, которые я хочу преобразовать, но мне бы хотелось, чтобы mthod исключал только <> и Quotes, чтобы иметь чистый XML.
Кодирование умлаутов не делает ваш XML "более чистым", но более трудным для чтения.
Здесь нет необходимости кодировать умлауты и другие символы, не принадлежащие ASCII, за исключением случаев, когда вы хотите создать ASCII XML. Это часто не требуется.
Используйте UTF-8 в качестве кодировки для вас, и вы будете в 99% случаев.
Если вам нужен ASCII, укажите кодировку в XML-API (по умолчанию UTF-8):
$dom = new DOMDocument('1.0', 'ASCII');
$dom
->appendChild($dom->createElement('text'))
->appendChild($dom->createTextNode('ÄÖÜ'));
echo $dom->saveXml();
Вывод:
<?xml version="1.0" encoding="ASCII"?>
<text>ÄÖÜ</text>
Можно загрузить XML в DOM и скопировать все узлы в новую DOM, определенную для использования ASCII:
$source = new DOMDocument();
$source->loadXml(
'<?xml version="1.0" encoding="utf-8" ?><text>ÄÖÜ</text>'
);
$target = new DOMDocument('1.0', 'ASCII');
$target->appendChild(
$target->importNode(
$source->documentElement, TRUE
)
);
echo $target->saveXml();
Если вы создаете XML как текст, вы можете использовать htmlentities()
для преобразования строки.