función de PHP para encender arbitraria “Descripción” en datos XML válidos para podcast
-
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>© 2005 John Doe</copyright>
<! — valid xml — >
<copyright>© 2005 John Doe</copyright>
A diferencia HTML , soportes XML solamente cinco "nombradas entidades de caracteres":
character name xml
& ampersand &
< less-than sign <
> greater-than sign >
’ apostrophe '
" quotation "
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 ©
℗ sound recording copyright ℗
™ trade mark sign ™
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?
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 dehtmlentities
(posiblemente combinado conhtmlspecialchars
y una decodificación previa de html ENTIDADES conmb_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:
© 2005 John Doe
A continuación, usted podría hacer:
$data = "© 2005 John Doe";
$data = mb_convert_encoding($data, "UTF-8", "HTML-ENTITIES");
$data = htmlspecialchars($data, ENT_NOQUOTES, "UTF-8");