función de PHP para encender arbitraria “Descripción” en datos XML válidos para podcast

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

  •  02-10-2019
  •  | 
  •  

Pregunta

Estoy leyendo la documentación para la creación de un podcast adecuado para iTunes y el href="http://www.apple.com/itunes/podcasts/specs.html#commonmistakes" rel="nofollow noreferrer"> Errores comunes :


Uso de HTML denominado Entidades de los caracteres.

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

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

A diferencia HTML , soportes XML solamente cinco   "nombradas entidades de caracteres":

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

Los cinco caracteres arriba son el único   caracteres que requieren escape en   XML. Todos los demás caracteres pueden ser   entrado directamente en un editor que   soportes UTF-8. También puedes usar   las referencias de caracteres numéricos que   especificar el Unicode para el carácter,   por ejemplo:

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

Para mayor referencia ver XML   Carácter y EntityReferences .


En este momento estoy usando htmlentities() bajo PHP5 y la alimentación está validando y de trabajo. Pero a partir de lo que se reúnen algunas cosas que podrían llegar a poner en el contenido podría convertirse en entidades que haría que ya no sea válida. ¿Cuál es la mejor función a utilizar para asegurar que no estoy pasando por malos datos? Estoy conseguiré entrado paranoide y obtener algo zado entidad y romper la alimentación - ¿debo usar str_replace() y reemplazar con entidades con nombre y dejar el resto en paz? O puedo usar htmlspecialchars() alguna manera?

Así que en resumen, ¿qué es una gota en el reemplazo para htmentities() que se asegurará de entrada es seguro para la descripción, títulos, etc en un podcast feed RSS?

¿Fue útil?

Solución

Puede:

  • Use un bloque CDATA lugar (sólo asegúrese de que está utilizando la codificación correcta, es decir, la codificación del archivo XML coincide con la codificación de los datos). Lo único que tienes que está pendiente de ]]>, que no se pueden poner, literalmente, en un bloque CDATA.
  • Uso mb_encode_numericentity en lugar de htmlentities (posiblemente combinado con htmlspecialchars y una decodificación previa de html ENTIDADES con mb_convert_encoding).

Si la codificación del archivo XML es UTF-8, puede simplemente eliminar las entidades. Suponga que tiene el siguiente fragmento de HTML:

&copy; 2005 John Doe

A continuación, usted podría hacer:

$data = "&copy; 2005 John Doe";
$data = mb_convert_encoding($data, "UTF-8", "HTML-ENTITIES");
$data = htmlspecialchars($data, ENT_NOQUOTES, "UTF-8");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top