как обрабатывать символ горизонтальной эллипсис (три точки) в XML-выходе через PHP

Как уже упоминалось в вопросе, я пытаюсь сгенерировать вывод XML (для приложения iPhone) с использованием PHP, который считывает данные из текстового поля MySQL.

Всякий раз, когда в поле есть горизонтальный эллипсис, XML не генерируется должным образом.

Я попробовал несколько способов избежать этого, как показано ниже, но никто не работает …

$row['detail'] = str_replace("&", "&amp;", $row['detail']); $row['detail'] = str_replace("…", "&hellip;", $row['detail']); //<-- prob is here $row['detail'] = str_replace("<", "&lt", $row['detail']); $row['detail'] = str_replace("\'", "&apos;", $row['detail']); $row['detail'] = str_replace(">", "&gt;", $row['detail']); $row['detail'] = str_replace("\"", "&quot;", $row['detail']); 

У меня есть 2 вопроса в основном,

  1. Как обращаться с горизонтальным эллипсисом?

  2. Есть ли еще такие символы, которые могут вызвать такую ​​проблему? Любая ссылка на этот список и его решение были бы замечательными!

благодаря

Возможно (и рекомендуемый способ) использовать буквальный, фактический символ в выходе XML. Не используйте HTML-сущности на основе обходных решений – это не нужно.

Причина, по которой это не работает для вас, вероятно, объясняется тем, что кодировка символов многоточия не соответствует кодировке создаваемого XML-файла.

Вам просто нужно убедиться, что они совпадают. Например, если вы создаете XML-файл UTF-8, эллипсовым символом должен быть также UTF-8.

Необработанный XML не знает о каких-либо именованных объектах, кроме &gt; , &lt; и `&amp; , Все остальные объекты должны быть объявлены как числовые коды символов, или вам нужно указать объекты в Doctype или DTD.

&hellip; объект определен в DTD HTML, который понимается всеми браузерами, но он не определен в большинстве других DTD XML.

В общем, если вы работаете с DTD, большую часть времени он будет сторонним DTD, с которым у вас нет контроля, поэтому вы не можете добавлять к ним объекты. Вы также не хотите добавлять сущности ad-hoc в свои собственные DTD.

Я бы не стал помещать объявления сущностей в заголовок doctype. Это ненужный пух, который на самом деле не очень много добавляет, если вы не повторяете один и тот же объект снова и снова в документе.

Поэтому моя рекомендация заключалась бы просто в использовании числовых объектов.

Итак, вместо &hellip; , вы должны использовать объект кода символа &#x2026; или &#8230; , То же самое относится и к любому другому символу, не относящемуся к 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 "&#x2026;"> ]> 

Если я правильно помню, вы можете сделать следующее, и это должно сработать. У меня не было возможности на самом деле проверить это, так что будьте осторожны.

 &amp;hellip;