Функция PHP Чтобы превратить произвольное «Описание» в действительные данные XML для подачи подкаста
-
02-10-2019 - |
Вопрос
Я читаю документацию для создания корма подкаста Подходит для iTunes., и то Распространенные ошибки Раздел говорит:
Использование HTML по именовам символьных объектах.
<! — illegal xml — >
<copyright>© 2005 John Doe</copyright>
<! — valid xml — >
<copyright>© 2005 John Doe</copyright>
В отличие от HTML, XML поддерживает только пять «названных символов»:
character name xml
& ampersand &
< less-than sign <
> greater-than sign >
’ apostrophe '
" quotation "
Пять символов выше - единственные символы, которые требуют выхода в XML. Все остальные символы могут быть введены непосредственно в редакторе, который поддерживает UTF-8. Вы также можете использовать числовые ссылки на символы, которые указывают Unicode для символа, например:
character name xml
© copyright sign ©
℗ sound recording copyright ℗
™ trade mark sign ™
Для дальнейшей ссылки см. 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 = "© 2005 John Doe";
$data = mb_convert_encoding($data, "UTF-8", "HTML-ENTITIES");
$data = htmlspecialchars($data, ENT_NOQUOTES, "UTF-8");