fonction PHP pour activer arbitraire « description » dans les données XML valides pour l'alimentation podcast

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

  •  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>&copy; 2005 John Doe</copyright>

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

HTML , supports XML seulement cinq   "entités de caractères nommées":

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

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             &#xA9;
℗           sound recording copyright  &#x2117;
™           trade mark sign            &#x2122;
  

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?

Était-ce utile?

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 de htmlentities (éventuellement combiné avec htmlspecialchars et un décodage précédent de html ENTITES avec mb_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:

&copy; 2005 John Doe

Ensuite, vous pouvez simplement faire:

$data = "&copy; 2005 John Doe";
$data = mb_convert_encoding($data, "UTF-8", "HTML-ENTITIES");
$data = htmlspecialchars($data, ENT_NOQUOTES, "UTF-8");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top