2006-10-06

Eliminar tildes con php

No suelo tener problemas con las tildes y elementos extraños, Alguna vez cuando son entradas a una base de datos. Cuando es así, utilizo htmlentities y sale el código asociado a ese caracter. Pero si queréis de verdad eliminar las tildes, con php se puede realizar una sencillita función que lea la cadena y que sustituya esos elementos extraños por sus más normalitos.

Esta función la he visto en algo que decir:

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

return $s;
}

Espero que le sirva a alguien...

19 comentarios:

Anónimo dijo...

Si me sirve Gracias!

Anónimo dijo...

se debería usar ahora (php5)

$vocalti= array ("á","é","í","ó","ú","Á","É","Í","Ó","Ú");
$vocales= array ("a","e","i","o","u","A","E","I","O","U");

str_replace($vocalti, $vocales,$variable);

Anónimo dijo...

sí que me ha servido, gracias!

Anónimo dijo...

A mi tambien me ha servido. Gracias.

Anónimo dijo...

a mi Álava se me transforma en aAlava

Anónimo dijo...

Pues lo he probado en mi servidor y a mi si me funciona. Tiene pinta de que tengas alguna configuración que no sea 'case sensitive' y te lo haga dos veces.

guisho dijo...

Gracias! muy util!

Unknown dijo...

muchas gracias loco !

Leovigildo dijo...

A mi no me ha servido niguno de lo dos, queda exactamente igual.

www.leodoncel.com

Jhonny dijo...

funcionar funciona..
Debes revisar tu implementación y ver que estás utilizando php

Ing. Juan Manuel Rivera dijo...

Amigos... no me funciona y eso que lo paso por 3 metodos diferentes...

por ej.. tengo..

function quitar_tildes($cadena)
{
$varCaracteres = array ("/á/", "/é/", "/í/", "/ó/", "/ú/", "/ñ/");
$varCaracteresHTML = array ("a", "e", "i", "o", "u", "n");
$cadena = preg_replace($varCaracteres, $varCaracteresHTML, $cadena);

$cadena= strtr($cadena, "àáâãäåèéêëìíîïòóôõöùúûüñ", "aaaaaaeeeeiiiiooooouuuun");

$vocalti= array ("á","é","í","ó","ú","Á","É","Í","Ó","Ú");
$vocales= array ("a","e","i","o","u","A","E","I","O","U");

echo $cadena=str_replace($vocalti, $vocales,$cadena);

return $cadena;
}

y la cadena sigueee igual.. que podria ser ???

Jhonny dijo...

Así a primera vista veo que tienes mal la linea donde pones :
echo $cadena=str_replace($vocalti, $vocales,$cadena);

deberías quitar el echo

Jhonny dijo...

has metido demasiadas cosas ahí, los ejemplos los debes hacer cada uno por su lado.

te paso una función simple que se basa en el ejemplo que está publicado en este artículo.

function limpieza($cadena)
{
$vocalti= array ("á","é","í","ó","ú","Á","É","Í","Ó","Ú","ñ","Ñ","À","È","Ì","Ò","Ù","à","è","ì","ò","ù","ç","Ç","â","ê","î","ô","û","Â","Ê","Î","Ô","Û","ü","ö","Ö","ï","ä","ë","Ü","Ï","Ä","Ë");
$vocales= array ("a","e","i","o","u","A","E","I","O","U","n","N","A","E","I","O","U","a","e","i","o","u","c","C","a","e","i","o","u","A","E","I","O","U","u","o","O","i","a","e","U","I","A","E");

$cadena=str_replace($vocalti, $vocales,$cadena);

return $string;
}

Jhonny dijo...

perdón, al final debe poner return $cadena

no return $tring

Anónimo dijo...

$nombreImg = basename($_FILES[$fileFieldName]["name"]);
$NoAllow = array("á","é","í","ó","ú","ä","ë","ï","ö","ü","à","è","ì","ò","ù","ñ"," ",",",";",":","¡","!","¿","?",'"',"Á","À","É","È","Í","Ì","Ó","Ó","Ú","Ù","ç","Ç","ñ","Ñ","â","ã","ª","Â","Ã","Î","î","ê","ô","õ","º","Ô","Õ","û","Û","`","´","!","¡","?","¿","=",")","(","/","\\","|","&","%","$","·","@","~","€","¬");
$Allow = array("a","e","i","o","u","a","e","i","o","u","a","e","i","o","u","n","_","","","","","","","",'',"A","A","E","E","I","I","O","O","U","U","c","C","n","N","a","a","a","A","A","I","i","e","o","o","o","O","O","u","U","","","","","","","","","","","","","","","S","","a","","E","");
$nombreImg = str_replace($NoAllow,$Allow,$nombreImg);

Anónimo dijo...

Muchas Gracias, si me sirve!

Anónimo dijo...

Me ha servidor mucho tu post, pero he tenido que modificarlo.
Los tiempos cambian y este post es del 2006. Ahora la función ereg_replace queda obsoleta desde PHP5 y su uso no se recomienda.

Mi cambio y solución sería la siguiente:

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

return $s;
}

Victor Falcon dijo...

Mejor todavía. Primero decodificamos $s a utf-8.

function limpiar_caracteres_especiales($s){
$s = utf8_decode($s);

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

return $s;
}

Anónimo dijo...

q datisimo, super bn me sirvio de una, pero la opcion de php5