Как уже упоминалось в вопросе, я пытаюсь сгенерировать вывод XML (для приложения iPhone) с использованием PHP, который считывает данные из текстового поля MySQL.
Всякий раз, когда в поле есть горизонтальный эллипсис, XML не генерируется должным образом.
Я попробовал несколько способов избежать этого, как показано ниже, но никто не работает …
$row['detail'] = str_replace("&", "&", $row['detail']); $row['detail'] = str_replace("…", "…", $row['detail']); //<-- prob is here $row['detail'] = str_replace("<", "<", $row['detail']); $row['detail'] = str_replace("\'", "'", $row['detail']); $row['detail'] = str_replace(">", ">", $row['detail']); $row['detail'] = str_replace("\"", """, $row['detail']);
У меня есть 2 вопроса в основном,
Как обращаться с горизонтальным эллипсисом?
Есть ли еще такие символы, которые могут вызвать такую проблему? Любая ссылка на этот список и его решение были бы замечательными!
благодаря
Возможно (и рекомендуемый способ) использовать буквальный, фактический символ в выходе XML. Не используйте HTML-сущности на основе обходных решений – это не нужно.
Причина, по которой это не работает для вас, вероятно, объясняется тем, что кодировка символов многоточия не соответствует кодировке создаваемого XML-файла.
Вам просто нужно убедиться, что они совпадают. Например, если вы создаете XML-файл UTF-8, эллипсовым символом должен быть также UTF-8.
Необработанный XML не знает о каких-либо именованных объектах, кроме >
, <
и `&
, Все остальные объекты должны быть объявлены как числовые коды символов, или вам нужно указать объекты в Doctype или DTD.
…
объект определен в DTD HTML, который понимается всеми браузерами, но он не определен в большинстве других DTD XML.
В общем, если вы работаете с DTD, большую часть времени он будет сторонним DTD, с которым у вас нет контроля, поэтому вы не можете добавлять к ним объекты. Вы также не хотите добавлять сущности ad-hoc в свои собственные DTD.
Я бы не стал помещать объявления сущностей в заголовок doctype. Это ненужный пух, который на самом деле не очень много добавляет, если вы не повторяете один и тот же объект снова и снова в документе.
Поэтому моя рекомендация заключалась бы просто в использовании числовых объектов.
Итак, вместо …
, вы должны использовать объект кода символа …
или …
, То же самое относится и к любому другому символу, не относящемуся к ascii.
Другим вариантом, конечно же, является вывод XML с использованием кодировки символов UTF-8 или UTF-16, что вообще отрицает необходимость каких-либо объектов. Это может быть или не быть вариантом для вас, но если это возможно, это может быть лучший способ.
Если у вас есть определенный символ, который вам нужен, чтобы найти числовые коды объектов, в Интернете есть множество мест для поиска ссылок на них. Вот из Википедии: http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
Надеюсь, это поможет.
XML понимает только несколько символьных сущностей '"&<>
. Все это приведет к недопустимости документа. Вы можете попробовать добавить объект в DTD с помощью
<!DOCTYPE text [ <!ENTITY hellip "…"> ]>
Если я правильно помню, вы можете сделать следующее, и это должно сработать. У меня не было возможности на самом деле проверить это, так что будьте осторожны.
&hellip;