Задача
В системе с использованием XSLT шаблонов предоставить контентерам возможность просто использовать привычные для них имена сущностей наподобие & nbsp; & mdash; и т.д. без необходимости использования цифровых определений типа & #160;, & #x00A0; или помещения спецсимволов в CDATA

Проблема
При загрузке в XML из базы данных множества блоков у меня возникла следующая проблема: Парсер ругался на неописанные сущности примерно следующим образом: «Entity: line 1: parser error: Entity 'yen' not defined».

Решение
Для того, чтобы при загрузке строки с описанием сущностей не возникало такой проблемы, нужно сделать то, что он от нас ожидает, т.е. описать эти сущности.

Загружаемая строка должна выглядеть примерно так:
<!DOCTYPE root [
<!ENTITY nbsp " 160;">
<!ENTITY yen " 165;">
]>
<text>Злой& nbsp; текст со злыми сущностями & yen;</text>


Для того, чтобы десять раз не упражняться можно подцепить один раз файл со списком всех необходимых имен
$entities = file_get_contents(PATH_SYS. 'templates/symbols.ent');


Работает это примерно следующим образом:

Подготовим строку для загрузки
$block_content = '<!DOCTYPE root [ '. $entities. ' ]><text>'.$block_content.'</text>';


С использованием метода DOMDocument::loadXML:
$dom_child_doc = DOMDocument::loadXML($block_content,LIBXML_NOENT);
$block_content_node = $blockDoc->importNode($dom_child_doc->lastChild,true);
$block = $blockDoc->blocks->appendChild($block_content_node);


С использованием функции simplexml_load_string:
$xml = simplexml_load_string($block_content,'SimpleXMLElement',LIBXML_NOENT);
$dom_sxe = dom_import_simplexml($xml);
$block_content_node = $blockDoc->importNode($dom_sxe, true);
$block = $blockDoc->blocks->appendChild($block_content_node);

$blockDoc — это некий объект DOMDocument в который мы добавляем блоки.
$blockDoc->blocks — нода этого документа, непосредственно в которую мы помещаем все блоки
Нужно не забывать устанавливать опцию «LIBXML_NOENT — преобразовывать сущности» для загрузчика строки, если есть необходимость чтобы все имена сущностей были преобразованы непосредственно в те символы, которые нам нужны.