Замена специальных символов при создании XML на PHP

Задача такая, при создании XML, в DOMDocument на php нужно заменить &, ', ", >, < Эти символы на &amp, &apos, &quot, &gt , &lt

Я из заменяю например

str_replace(['&', '\'', '"', '>', '<'], ['&amp', '&apos',  '&quot', '&gt' , '&lt'], $text);

Но есть и стандартная функция htmlspecialchars ни суть.

Дело в том что createElement вызывает ошибку

PHP Warning:  DOMDocument::createElement(): unterminated entity reference quotБанные штучки&quot in E:\DEV\fixcom\test\class\XMLManager.php on line 104

Но этот XML для API одного приложения, и там сказанно заменять эти символы! Как сделать так что бы DOMDocument их принял?

Приведу пример кода

$dom =  new DOMDocument( "1.0", "utf-8" );
$dom->formatOutput = true;
$root =  $dom->createElement('start');
$root->setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
$company = $dom->createElement('company','company');
$model = $dom->createElement('model',   htmlspecialchars('"TEST"   &     <AAA>   \'BBB\'' ));
$root->appendChild($model);
$dom->appendChild( $root );
print_r($dom->saveXML());

На выходе:

<?xml version="1.0" encoding="utf-8"?>
<start xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <model>"TEST"   &amp;     &lt;AAA&gt;   'BBB'</model>
</start>

Ковычки не заменились. Ни двойные ни одинарные.


Ответы (1 шт):

Автор решения: 65536kb

HTML сущности должны заканчиваться на ;, поэтому createElement() не видит их.
Лучше использовать htmlspecialchars().

UPD:
createElement() не позволяет экранировать кавычки. Об этом сказано в документации.
Устанавливайте значение через textContent:

$model = $dom->createElement('model');
$model->textContent = $text;
→ Ссылка