2010-12-23 12 views
20

Cuando intento analizar un html que tiene   salpicado a través de él y echo, el   "se convierte en" este carácter:. Además, html_entity_decode() y str_replace() no lo cambia.Problema de análisis de PHP -   y

¿Por qué sucede esto? ¿Cómo puedo eliminar los Â?

+3

que "gira" o es interpretado por el navegador como tal? – yoda

+1

¿Cómo se analiza el HTML? – deceze

Respuesta

31

El non-breaking space existen 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 multi-byte) entonces esos bytes se convierte respectivamente los caracteres  y otro espacio de no separación .

Aparentemente estás analizando el HTML usando UTF-8 y haciendo eco de los resultados usando ISO-8859-1. Para solucionar este problema, necesita analizar HTML usando ISO-8859-1 o repetir los resultados usando UTF-8. Yo recomendaría usar UTF-8 todo el camino. Vaya a través del PHP UTF-8 cheatsheet para alinearlo todo.

+15

'str_replace (" \ xc2 \ xa0 ", '', $ str);' funcionó para mí. ¡Gracias! – Tapper

2
html_entity_decode(" ") == '\xa0' 

Creo que por diseño, no entiendo por qué str_replace no funciona para usted, trate de este fragmento:

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

quizá \ XA0 que no es una cadena Unicode válida, por lo que usar el resultado de html_entity_decode() puede ser más apropiado para el reemplazo de texto en lugar de \ xa0.

BalusC explicación parece plausible, es posible intentar insertar utf8 \ xc2 \ xa0 en el entonces tratar de mostrarlo como latino en lugar de UTF-8, si desea utilizar Unicode cosas que usted debe tener codificación UTF-8 en todas partes, desde el juego de caracteres del servidor hasta la base de datos, ya que tendrá el mismo problema al usar, por ejemplo à

1

preg_replace() también puede hacer el truco:

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