как обрабатывать горизонтальный многоточечный символ (три точки) в выводе XML через PHP - PullRequest
3 голосов
/ 30 июня 2011

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

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

Я пробовал несколько способов избежать его, как показано ниже, но ни один из них не работает ...

$row['detail'] = str_replace("&", "&", $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. Есть ли еще такие символы, которые могут вызвать такую ​​проблему?Любая ссылка на этот список и его решение было бы здорово!

Спасибо

Ответы [ 3 ]

8 голосов
/ 30 июня 2011

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

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

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

4 голосов
/ 30 июня 2011

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

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

В целом, если вы работаете с 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

Надеюсь, это поможет.

0 голосов
/ 30 июня 2011

XML понимает только несколько символов, '"&<>.Все, что будет, приведет к тому, что документ будет недействительным.Вы можете попробовать добавить объект в DTD с помощью

 <!DOCTYPE text [ <!ENTITY hellip "&#x2026;"> ]>
...