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


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

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

ГИБКИЙ:

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 после декодирования.

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

Author: Anji, 2011-08-02

3 answers

Во-первых, если у вас есть висячий символ & в вашем xml, то у вас ошибка синтаксиса xml. Это не имеет ничего общего с жалобами SimpleXML или любого другого анализатора. Я бы посоветовал вам исправить это еще до того, как данные попадут в базу данных, а еще лучше, до того, как они будут отправлены в службу 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. Он должен эффективно превращать символы & в &amp;, все из них. т. Е. Это также должно превратите случаи &gt; в &amp;gt;, так что будьте осторожны с этим.

Дайте мне знать, если вам понадобится что-нибудь еще. Кроме того, как у тебя дела, чувак!?;)

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

 2
Author: Shrikant Sharat, 2011-08-02 16:26:59

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

 3
Author: Gordon, 2011-08-02 16:20:44

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

 1
Author: Ben, 2011-08-02 16:14:31