Функция PHP Чтобы превратить произвольное «Описание» в действительные данные XML для подачи подкаста

StackOverflow https://stackoverflow.com/questions/3163142

  •  02-10-2019
  •  | 
  •  

Вопрос

Я читаю документацию для создания корма подкаста Подходит для iTunes., и то Распространенные ошибки Раздел говорит:


Использование HTML по именовам символьных объектах.

<! — illegal xml — >
<copyright>&copy; 2005 John Doe</copyright>

<! — valid xml — >
<copyright>&#xA9; 2005 John Doe</copyright>

В отличие от HTML, XML поддерживает только пять «названных символов»:

character   name               xml
&           ampersand          &amp;
<           less-than sign     &lt;
>           greater-than sign  &gt;
’           apostrophe         &apos;
"           quotation          &quot;

Пять символов выше - единственные символы, которые требуют выхода в XML. Все остальные символы могут быть введены непосредственно в редакторе, который поддерживает UTF-8. Вы также можете использовать числовые ссылки на символы, которые указывают Unicode для символа, например:

character   name                       xml
©           copyright sign             &#xA9;
℗           sound recording copyright  &#x2117;
™           trade mark sign            &#x2122;

Для дальнейшей ссылки см. XML символ и объекты.


Прямо сейчас я использую htmlentities() Под php5 и корма подтверждается и работает. Но из того, что я собираю некоторые вещи, которые могут быть введены в контент, могут стать организациями, которые не сделали бы его недействительным. Какая наилучшая функция, чтобы обеспечить, я не прохожу по плохим данным? Я параноидал что-то вступите и получит сущность и сломал корм - должен просто использовать str_replace() и заменить с названными сущностями и оставить остальные в одиночку? Или я могу использовать htmlspecialchars() как-то?

Так короче, что такое замена htmentities() Это убедитесь, что ввод безопасен для описания, заголовков и т. Д. В подаче подкаста RSS?

Это было полезно?

Решение

Вы также можете:

  • Вместо этого используйте блок CDATA (просто убедитесь, что вы используете правильное кодирование, то есть кодирование файла XML соответствует кодированию данных). Единственный думаю, что вы должны найти ]]>, который не может быть поставлен буквально в блоке CDATA.
  • Использовать mb_encode_numericentity вместо htmlentities (возможно, в сочетании с htmlspecialchars и предыдущий декодирование HTML реактирует с mb_convert_encoding).

Если кодировка файла XML является UTF-8, вы можете просто удалить объекты. Предположим, у вас есть следующий HTML-фрагмент:

© 2005 John Doe

Тогда вы могли бы просто сделать:

$data = "&copy; 2005 John Doe";
$data = mb_convert_encoding($data, "UTF-8", "HTML-ENTITIES");
$data = htmlspecialchars($data, ENT_NOQUOTES, "UTF-8");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top