2011-08-25 2 views
10

Es una A mayúscula con^en la parte superior: ¿Qué es este personaje (Â) y cómo lo elimino con PHP?

Se muestra en cadenas extraídas de páginas web. Muestra dónde había anteriormente un espacio vacío en la cadena original en el sitio original. Este es el personaje real que está almacenado en mi base de datos. También es lo que se muestra en mi sitio web cuando hago eco de una cadena que lo contiene.

Me doy cuenta de que es un problema de codificación de caracteres cuando originalmente procesé la página web, pero ahora estoy atascado con estos caracteres en mi base de datos. Tengo que convertir este carácter cuando se muestra, o en otro lugar en el php antes de la salida html que lo contiene. No puedo reprocesar los documentos originales.

He intentado str_replace() y html_entity_decode() y no hago nada.

¿Qué más debo probar?

+0

no debería eliminarlos por str_replace, debe solucionar el problema de codificación primero. eche un vistazo a esto: http://stackoverflow.com/search?q=mysql+encoding y este http://stackoverflow.com/search?q=php+encoding –

Respuesta

17

"Latín 1" es el problema aquí. Hay aproximadamente 65256 caracteres UTF-8 disponibles para una página web que no puede almacenar en una página de códigos Latin-1.

Para su problema inmediato que debe ser capaz de

$clean = str_replace(chr(194)," ",$dirty) 

Sin embargo, me gustaría cambiar su base de datos para utilizar UTF-8 antes posible ya que el problema es casi seguro que vuelva a ocurrir.

+3

Oh, no, hay ** mucho más caracteres ** que eso ... –

+0

El espacio de código Unicode sube a U + 10FFFF, por lo que se trata de un millón de puntos de código, más o menos algunos ilegales. –

+0

aquí hay un gráfico útil para referenciar caracteres como este: http://www.ascii-code.com/ –

6

No es realmente un carácter, y es probable que se deba a una desalineación entre la codificación del contenido y la codificación del navegador. Intente configurar la codificación de la página generada para lo que está utilizando.

p. Ej. En la sección, salida:

echo "<META http-equiv='Content-Type' content='text/html; charset=UTF-8'>"; 

(Ajuste UTF-8 a lo que usted está utilizando)

+0

+1 - este es un problema que necesita corregir el causa raíz (aunque el simple hecho de cambiar los encabezados podría no cortarse completamente, dependiendo de la situación) –

+0

Este es el carácter real que está almacenado en mi base de datos. ¿Eso cambia la situación en absoluto? Mi codificación de base de datos es Latin 1 (predeterminado). No estoy muy familiarizado con los problemas de codificación. –

+1

Oh sí, lo siento, no leí la pregunta con cuidado. En ese caso, después de extraer datos de otro sitio, debe detectar su codificación y convertirla a la codificación de su base de datos antes de almacenarlos. Por lo general, se hace analizando el encabezado como el que di, pero dependiendo del sitio que rastreas puede ser complicado. – Sheepy

0

códigos uso de fuelle

echo "<META http-equiv='Content-Type' content='text/html; charset=UTF-8'>"; 
echo htmlspecialchars_decode($your_string, ENT_QUOTES); 
0

que utilizan éste mucho

function cleanStr($value){ 
    $value = str_replace('Â', '', $value); 
    $value = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $value); 
    return $value; 
} 
0

Este problema se produce cuando se utilizan diferentes juegos de caracteres en su web.

para resolver este (con UTF-8 en los ejemplos):

en el <HEAD> de su página añadir charset:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

En cualquier forma de presentar añadir accept-charset:

<form name="..." method=".." id=".." accept-charset="utf-8"> 

Si está utilizando php + MySQLi para procesar su formulario, debe asegurarse de que la conexión de la base de datos también sea compatible con su juego de caracteres.Estilo por procedimientos:

mysqli_set_charset($link, "utf8"); 

y objeto de estilo orientado:

$mysqli->set_charset("utf8") 
2

Esto funciona para mí:

$string = "Sentence ‘not-critical’ and \n sorting ‘not-critical’ or this \r and some ‘not-critical’ more. ' ! -."; 
$output = preg_replace('/[^(\x20-\x7F)\x0A\x0D]*/','', $string); 
+1

No trabaje con cirílico –

Cuestiones relacionadas