xml — PHP SimpleXML изменяет символы разрыва строки в элементах CDATA

Я использую PHP версии 5.3.9. Я сталкиваюсь с проблемами при использовании SimpleXML, потому что он изменяет символы конца строки в разделах CDATA при разборе XML-файлов.

Например:

$string = "<value><![CDATA[hello\r\nworld]]></value>";

$xml = simplexml_load_string($string);
var_dump((string)$xml);

var_dump("hello\r\nworld");

Выходы:

string(11) "hello world"string(12) "hello world"

Даже не глядя на шестнадцатеричные значения, вы сразу видите, что разобранная версия SimpleXML превращает новую строку из новой строки Windows \ n \ \ в новую строку \ n \ unix из длин строк. Это проблема, потому что я хотел бы хранить serialize()объекты ed в моем файле XML, но serialize() хранит точную длину любых сериализованных строк, включая символы новой строки. Когда я пытаюсь unserialize() строки после чтения в XML длина строки больше не является правильной из-за измененного окончания строки, и она не может быть правильно десериализована. Можно обойти это, убедившись, что я очищаю каждую входную строку, чтобы заменить «\ r \ n» на «\ n», но это не то, что мне нужно делать.

У меня сложилось впечатление, что парсеры XML не должны были каким-либо образом анализировать содержимое элементов CDATA. Я неправильно понимаю, как определяются разделы CDATA, я как-то неправильно использую SimpleXML или это ошибка в SimpleXML?

3

Решение

Я не понял твою точку зрения.

но только заметьте, что вы использовали двойные кавычки.

в моем варианте:

$string = '<value><![CDATA[hello\r\nworld]]></value>';

$xml = simplexml_load_string($string);
var_dump($xml->__toString());
var_dump((string)$xml);

$xml = new SimpleXMLElement($string);
var_dump($xml->__toString());

var_dump('hello\r\nworld');

выходы

string(14) "hello\r\nworld"string(14) "hello\r\nworld"string(14) "hello\r\nworld"string(14) "hello\r\nworld"

но каковы ваши ожидания? просто скажите нам, что это должно быть?

-2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]