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...
Suscribirse a:
Enviar comentarios (Atom)
19 comentarios:
Si me sirve Gracias!
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);
sí que me ha servido, gracias!
A mi tambien me ha servido. Gracias.
a mi Álava se me transforma en aAlava
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.
Gracias! muy util!
muchas gracias loco !
A mi no me ha servido niguno de lo dos, queda exactamente igual.
www.leodoncel.com
funcionar funciona..
Debes revisar tu implementación y ver que estás utilizando php
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 ???
Así a primera vista veo que tienes mal la linea donde pones :
echo $cadena=str_replace($vocalti, $vocales,$cadena);
deberías quitar el echo
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;
}
perdón, al final debe poner return $cadena
no return $tring
$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);
Muchas Gracias, si me sirve!
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;
}
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;
}
q datisimo, super bn me sirvio de una, pero la opcion de php5
Publicar un comentario