Я работаю над проектом в 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