Экранирование PHP_EOL в xml-аттрибуте
15 октября 2015, 2:20
Автор: deadka
Доброго времени суток!
Есть нужда "ручками" собрать xml, не используя специализированные средства как DOMDocument.
Проблема в том, что PHP_EOL, который находится в аттрибуте сохраняется по разному - DomDocument::SaveXML преобразует его в ,
а htmlspecialchars этого не делает. Возникает вопрос - какой специализированной функцией (или набором) можно вместо (или в дополнение к) htmlcpecialchars добиться нужного результата без говнокодных замен уровня
$val = str_replace(PHP_EOL," ",$val);
.
Прошу поделиться соображениями.
Код (текущий вариант создаёт два идентичных файла, но боюсь, что какие-то символы не учел и изобретаю велосипед):
Есть нужда "ручками" собрать xml, не используя специализированные средства как DOMDocument.
Проблема в том, что PHP_EOL, который находится в аттрибуте сохраняется по разному - DomDocument::SaveXML преобразует его в ,
а htmlspecialchars этого не делает. Возникает вопрос - какой специализированной функцией (или набором) можно вместо (или в дополнение к) htmlcpecialchars добиться нужного результата без говнокодных замен уровня
$val = str_replace(PHP_EOL," ",$val);
.
Прошу поделиться соображениями.
Код (текущий вариант создаёт два идентичных файла, но боюсь, что какие-то символы не учел и изобретаю велосипед):
$dom = new DOMDocument('1.0', 'UTF-8');
$root = $dom->createElement('root');
$dom->appendChild($root);
$point_node = $dom->createElement('marker');
$point_node = $root->appendChild($point_node);
$val = "a".PHP_EOL."b";
$point_node->setAttribute('id',$val);
$_1 = $dom->saveXML();
file_put_contents("1",$_1);
$val = htmlspecialchars($val,ENT_QUOTES,'UTF-8');
$val = str_replace(PHP_EOL," ",$val);
$_2 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>".PHP_EOL."<root><marker id=\"". $val . "\"/></root>".PHP_EOL;
file_put_contents("2",$_2);
$root = $dom->createElement('root');
$dom->appendChild($root);
$point_node = $dom->createElement('marker');
$point_node = $root->appendChild($point_node);
$val = "a".PHP_EOL."b";
$point_node->setAttribute('id',$val);
$_1 = $dom->saveXML();
file_put_contents("1",$_1);
$val = htmlspecialchars($val,ENT_QUOTES,'UTF-8');
$val = str_replace(PHP_EOL," ",$val);
$_2 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>".PHP_EOL."<root><marker id=\"". $val . "\"/></root>".PHP_EOL;
file_put_contents("2",$_2);