fonction PHP pour activer arbitraire « description » dans les données XML valides pour l'alimentation podcast
-
02-10-2019 - |
Question
Je suis en train de lire la documentation pour la création d'un flux de podcast approprié pour iTunes et la section Erreurs fréquentes dit :
Utilisation HTML des entités nommées de caractères.
<! — illegal xml — >
<copyright>© 2005 John Doe</copyright>
<! — valid xml — >
<copyright>© 2005 John Doe</copyright>
HTML , supports XML seulement cinq "entités de caractères nommées":
character name xml
& ampersand &
< less-than sign <
> greater-than sign >
’ apostrophe '
" quotation "
Les cinq caractères ci-dessus sont la seule caractères qui nécessitent échapper à XML. Tous les autres personnages peuvent être est entré directement dans un éditeur supports UTF-8. Vous pouvez aussi utiliser références numériques de caractères spécifiez le Unicode du caractère, par exemple:
character name xml
© copyright sign ©
℗ sound recording copyright ℗
™ trade mark sign ™
Pour référence plus voir XML Caractère et EntityReferences .
En ce moment je suis en utilisant htmlentities()
sous PHP5 et l'alimentation est la validation et de travail. Mais d'après ce que je comprends certaines choses qui pourraient se mettre dans le contenu pourrait devenir des entités qui rendraient plus être valide. Quelle est la meilleure fonction à utiliser pour assurer que je ne suis pas en passant le long de mauvaises données? Je suis quelque chose paranoïaque obtiendrai est entré et obtenir isé entité et briser l'alimentation - dois-je utiliser juste str_replace()
et le remplacer par des entités nommées et laisser le reste tout seul? Ou puis-je utiliser htmlspecialchars()
en quelque sorte?
Donc en bref, ce qui est une solution de remplacement pour htmentities()
qui fera entrée vous est sans danger pour la description, titres, etc dans un podcast flux RSS?
La solution
Vous pouvez:
- Utilisez un bloc CDATA à la place (juste vous faire vous utilisez l'encodage correct, à savoir, l'encodage du fichier XML correspond au codage des données). La seule chose que vous devez affût est
]]>
, qui ne peut être littéralement mis dans un bloc CDATA. - Utilisation
mb_encode_numericentity
au lieu dehtmlentities
(éventuellement combiné avechtmlspecialchars
et un décodage précédent de html ENTITES avecmb_convert_encoding
).
Si l'encodage du fichier XML est UTF-8, vous pouvez simplement supprimer les entités. Supposons que vous ayez le fragment HTML suivant:
© 2005 John Doe
Ensuite, vous pouvez simplement faire:
$data = "© 2005 John Doe";
$data = mb_convert_encoding($data, "UTF-8", "HTML-ENTITIES");
$data = htmlspecialchars($data, ENT_NOQUOTES, "UTF-8");