Почему вы должны использовать блоки XML CDATA?
При создании XML мне интересно, почему блоки CDATA используются, а не просто экранируют данные. В блоке CDATA разрешено что-то, что не может быть экранировано и помещено в обычный тег?
<node><![CDATA[ ...something... ]]></node>
вместо
<node>...something...</node>
Естественно, вам нужно будет экранировать данные в любом случае:
function xmlspecialchars($text)
{
return str_replace(''', ''', htmlspecialchars($text, ENT_QUOTES, 'utf-8'));
}
Отспекуляция кажется, что CDATA была просто возможным решением, когда у вас нет возможности скрыть данные - но вы все еще доверяете этому. Например, RSS-канал из вашего блога (который по тем или иным причинам не может избежать сущностей).