2010-07-02 8 views
0

Я читаю документацию для создания фида подкаст suitable for iTunes, а секция Common Mistakes говорит:PHP функции, чтобы включить произвольное «описание» в действительные данные XML для подачи подкаста


Использование 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 Character and EntityReferences.


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

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

ответ

2

Вы можете:

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

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

 
&copy; 2005 John Doe 

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

$data = "&copy; 2005 John Doe"; 
$data = mb_convert_encoding($data, "UTF-8", "HTML-ENTITIES"); 
$data = htmlspecialchars($data, ENT_NOQUOTES, "UTF-8"); 
+0

Их спецификации конкретно сказать «секции CDATA настоятельно рекомендуется.» Вот и все.Если я использую 'mb_encode_numericentity' http://us3.php.net/mb_encode_numericentity, что я передаю как 2-й и 3-й параметры:' array $ convmap, string $ encoding'? Я предполагаю, что '$ encoding' будет 'UTF-8' – artlung

+0

Я отредактировал ответ, чтобы ответить на ваши вопросы: p – Artefacto

+0

Итак, похоже, что я продолжу и продолжаю работать' htmlentities() 'перед тем, как я запустил ваш' mb_convert_encoding() 'и' htmlspecialchars() 'then? Эти два вызова в основном «xml-ize» кодировки для соответствия, правда? – artlung

 Смежные вопросы

  • Нет связанных вопросов^_^