special especiales escape convertir characters caracteres aacute php html parsing character-encoding

especiales - Problema de análisis PHP-& nbsp; y Â



php htmlspecialchars (3)

El espacio sin interrupción existe en UTF-8 de dos bytes: 0xC2 y 0xA0 .

Cuando esos bytes se representan en ISO-8859-1 (una codificación de un solo byte) en lugar de UTF-8 (una codificación de múltiples bytes), esos bytes se convierten respectivamente en los caracteres  y otro espacio no disruptivo .

Aparentemente está analizando el HTML usando UTF-8 y haciendo eco de los resultados usando ISO-8859-1. Para solucionar este problema, debe analizar HTML utilizando ISO-8859-1 o repetir los resultados usando UTF-8. Yo recomendaría usar UTF-8 todo el camino. Examine la hoja de prueba PHP UTF-8 para alinearlo todo.

Cuando intento analizar un html que tiene   salpicado a través de él y luego echo , el   "se convierte en" este personaje: Además, html_entity_decode() y str_replace() no lo cambia.

¿Por qué está pasando esto? ¿Cómo puedo eliminar los Â?


preg_replace() también puede hacer el truco:

preg_replace("/&#?[a-z0-9]{2,8};/i","", $var);


html_entity_decode(" ") == ''/xa0''

Creo que, por diseño, no entiendo por qué str_replace no funciona para ti, prueba este fragmento:

$nbsp = html_entity_decode(" "); $s = html_entity_decode("[ ]"); $s = str_replace($nbsp, " ", $s); echo $s;

quizás / xa0 no sea una cadena unicode válida, por lo que el uso de html_entity_decode () puede ser más apropiado para el reemplazo de texto en lugar de / xa0.

La explicación de BalusC parece verosímil: puede intentar insertar utf-8 / xc2 / xa0 en el intento de mostrarlo como latino en lugar de utf8. Si desea utilizar elementos unicode, debe conservar la codificación de utf-8 en todas partes, desde el juego de caracteres de el servidor a la base de datos, ya que tendrá el mismo problema al usar, por ejemplo, à