Создание XML в PHP с помощью SimpleXML со специальными символами

Я работаю над проектом в flex 3 , где пользователь вводит некоторый текст, который должен быть сохранен в базе данных mysql и показан ниже. Я использую XML для передачи данных с flex на php и наоборот. SimpleXMLElement в php используется для создания XML . Проблема заключается в разрыве XML на специальных символах.

Вот пример кода:

FLEX:

 var someXML:XML = <root><data>somedata</data><data>...</data> ... </root> var data:Object = {}; data.xmlData = someXML; saveDataService.send(data); 

Здесь somedata – это данные, введенные пользователем. В php я извлекаю someXML с помощью SimpleXMLElement и сохраняю его в mysql . Здесь нет проблем. Даже если у somedata есть специальные символы, он работает нормально, и данные хранятся правильно.

Теперь, в другом случае, получение данных из базы данных и отображение в flex, ответ от php прерывается с ошибкой:

SimpleXMLElement :: addChild () [simplexmlelement.addchild]: ссылка на неиспользуемую сущность

Я попытался использовать urlencode в php и функцию decodeURI в flex, но декодированная строка не то же самое, несколько специальных символов по-прежнему %xy после декодирования.

Как решить эту проблему?

Во-первых, если у вас есть оборванный символ и ваш xml, то у вас есть синтаксическая ошибка xml. Это не имеет никакого отношения к SimpleXML или любому другому парсеру, жалующимся. Я бы посоветовал вам исправить это еще до того, как данные попадут в db, тем не менее, прежде чем он будет отправлен в службу php.

Предложение Гордона работает, по крайней мере. Вероятно, вы столкнетесь с проблемой с другими персонажами, такими как < , " и т. Д., Позже, и вы столкнетесь с почти тем же самым.

Я бы предположил, что вы делаете htmlentities например операцию над текстовыми данными в стороне xml, не включая сами теги xml. Следующий код, взятый из http://thingsthatwork.net/index.php/2008/06/26/html-entities-and-actionscript/

 XML(new XMLNode(XMLNodeType.TEXT_NODE, "content with special chars like & and others")).toXMLString(); 

Не тестировали выше, но он должен вернуть вам санированный контент, который вы можете поместить в xml. Он должен эффективно превращать & chars в &amp; , все они. т. е. Это должно также включать в себя случаи &gt; до &amp;gt; , поэтому будьте осторожны.

Позвольте мне знать, если вам нужно что-нибудь еще. Кроме того, как я делаю человека !? 😉

Редактирование : О, помните, что с тех пор я использовал php, поэтому некоторые из вышеперечисленных сведений могут быть немного отключены. Пожалуйста, поправь меня. Благодарю.

В XML an & запускает сущность. ; заканчивает его. Когда у вас есть буквальный & вы получите ссылку на неограниченную сущность . Измените all & to &amp; которые уже не являются объектами, например, не меняют &gt; до &amp;gt; , Или поместите somedata в секции CDATA.

Попробуйте ускользнуть от ваших данных с помощью htmlspecialchars, прежде чем передавать его в SimpleXMLElement :: addChild