Я работаю над проектом в 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 в &
, все они. т. е. Это должно также включать в себя случаи >
до &gt;
, поэтому будьте осторожны.
Позвольте мне знать, если вам нужно что-нибудь еще. Кроме того, как я делаю человека !? 😉
Редактирование : О, помните, что с тех пор я использовал php, поэтому некоторые из вышеперечисленных сведений могут быть немного отключены. Пожалуйста, поправь меня. Благодарю.
В XML an &
запускает сущность. ;
заканчивает его. Когда у вас есть буквальный &
вы получите ссылку на неограниченную сущность . Измените all &
to &
которые уже не являются объектами, например, не меняют >
до &gt;
, Или поместите somedata в секции CDATA.
Попробуйте ускользнуть от ваших данных с помощью htmlspecialchars, прежде чем передавать его в SimpleXMLElement :: addChild