Избегайте специальных символов без <> и кавычек с PHP

0

У меня есть 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.

Теги:
svg

1 ответ

2
Лучший ответ

Кодирование умлаутов не делает ваш 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>&#196;&#214;&#220;</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() для преобразования строки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню