Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/03/2011, 14:33
Malk
 
Fecha de Ingreso: septiembre-2010
Ubicación: Puebla
Mensajes: 14
Antigüedad: 13 años, 7 meses
Puntos: 0
Acentos y caracteres especiales

Saludos a todos,

Nuevamente yo con una duda, resulta que tengo la siguiente función que se encarga de eliminar los acentos:

<?
function limpiar_caracteres_especiales($s)
{
$s = ereg_replace("[áàâãª]","a",$s);
$s = ereg_replace("[ÁÀÂÃ]","A",$s);
$s = ereg_replace("[éèê]","e",$s);
$s = ereg_replace("[ÉÈÊ]","E",$s);
$s = ereg_replace("[íìî]","i",$s);
$s = ereg_replace("[ÍÌÎ]","I",$s);
$s = ereg_replace("[óòôõº]","o",$s);
$s = ereg_replace("[ÓÒÔÕ]","O",$s);
$s = ereg_replace("[úùû]","u",$s);
$s = ereg_replace("[ÚÙÛ]","U",$s);
$s = str_replace("ñ","n",$s);
$s = str_replace("Ñ","N",$s);
return $s;
}

echo limpiar_caracteres_especiales('Niño Bónító');
?>

La función si me elimina los acentos pero me da resultados algo extraños, la prueba anterior me da como resultado: Nia±o Baonaitao

Y si pruebo con la cadena 'á é í ó ú' el resultado es 'aa ae ai ao ao' la 'a' la repite cada vez que quita un acento, la 'ú' ni la vio y si la vio la reemplazo por una 'o'

¿Alguien sabe porqué y qué hacer para resolverlo?

Nota: el asunto es simple, quiero quitar acentos y caracteres especiales a las cadenas de texto porque contienen direcciones que serán geocodificadas por medio del google geocoder para obtener la latitud y longitud. Aparentemente el geocodificador no puede leer acentos ni caracteres especiales y arroja error cada vez que alguien ingresa algo como "Av. Benito Júarez Nº 1230 Col. Valparaíso, Zacatlán" o "Av. Benito Juárez #1230 Col. Valparaíso, Zacatlán" es por eso que quiero convertirlo a "Av Benito Juarez 1230 Col Valparaiso Zacatlan" que no me genera problemas al geocodificarlo.

Esto genera dos preguntas:

1. ¿Cómo puedo mejorar el código anterior para que haga lo que quiero?
o bien,
2. ¿Alguien sabe como geocodificar sin que los acentos o caracteres especiales afecten el proceso?

Naturalmente con responder sólo una de las dos preguntas bastará de modo que espero su ayuda.