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, à