w3school validators validator valid test services school probar online google php utf-8 rss

php - validators - utf-8 y htmlentities en fuentes RSS



w3c school rdf (6)

Desea hacer $output = htmlentities(utf8_encode($source)); . Esto se debe a que primero desea convertir sus caracteres internacionales en UTF8 adecuado y luego tener ampersands (y posiblemente algunos de los caracteres UTF-8 también) entregados a entidades HTML. Si primero hace las entidades, es posible que algunos de los caracteres internacionales no se manejen correctamente.

Si ninguno de sus caracteres internacionales va a ser modificado por utf8_encode, entonces no importa en qué orden los llame.

Estoy escribiendo algunos feeds RSS en PHP y estoy luchando con problemas de codificación de caracteres. ¿Debo utf8_encode () antes o después de la codificación htmlentities ()? Por ejemplo, tengo tanto signos de unión y caracteres chinos en un elemento de descripción, y no estoy seguro de cuál de estos es el correcto:

$output = utf8_encode(htmlentities($source)); or $output = htmlentities(utf8_encode($source));

¿Y por qué?


No use htmlentities() !

Simplemente use los caracteres UTF-8. Solo asegúrate de declarar la codificación del feed en los encabezados HTTP ( Content-Type:application/xml;charset=UTF-8 ) o, en su defecto, en el feed en sí usando <?xml version="1.0" encoding="UTF-8"?> en la primera línea.


Es importante pasar el conjunto de caracteres a la función htmlentities, ya que el valor predeterminado es ISO-8859-1:

utf8_encode(htmlentities($source,ENT_COMPAT,''utf-8''));

Debe aplicar htmlentities primero para permitir que utf8_encode codifique las entidades correctamente.

(EDIT: cambié de mi opinión anterior a que el orden no importaba según los comentarios. Este código se prueba y funciona bien).


Podría ser más fácil olvidar las htmlentities y usar una sección CDATA. Funciona para la sección de título, que no parece admitir caracteres HTML codificados en el visor de RSS de Firefox:

<title><![CDATA[News & Updates " > » ☂ ☺ ☹ ☃ Test!]]></title>


Después de mucha prueba y error, finalmente encontré una forma de mostrar correctamente una cadena desde un valor de base de datos codificada en utf8, a través de un archivo xml, a una página html:

$output = ''<![CDATA[''.utf8_encode(htmlentities($string)).'']]>'';

Espero que esto ayude a alguien.


Primero: la función utf8_encode convierte de ISO 8859-1 a UTF-8. Por lo tanto, solo necesita esta función, si su codificación de entrada / juego de caracteres es ISO 8859-1. Pero, ¿por qué no usas UTF-8 en primer lugar?

Segundo: No necesitas htmlentities . Solo necesita htmlspecialchars para reemplazar los caracteres especiales por referencias de caracteres. htmlentities reemplazarían a los caracteres "demasiado" que pueden codificarse directamente con UTF-8. Importante es que usa el estilo de cotización ENT_QUOTES para reemplazar las comillas simples también.

Entonces mi propuesta:

// if your input encoding is ISO 8859-1 htmlspecialchars(utf8_encode($string), ENT_QUOTES) // if your input encoding is UTF-8 htmlspecialchars($string, ENT_QUOTES, ''UTF-8'')