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:

  1. Anónimo6:24 p. m.

    Si me sirve Gracias!

    ResponderEliminar
  2. Anónimo10:52 p. m.

    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);

    ResponderEliminar
  3. Anónimo5:39 p. m.

    sí que me ha servido, gracias!

    ResponderEliminar
  4. Anónimo6:39 a. m.

    A mi tambien me ha servido. Gracias.

    ResponderEliminar
  5. Anónimo10:15 a. m.

    a mi Álava se me transforma en aAlava

    ResponderEliminar
  6. Anónimo10:40 a. m.

    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.

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

    www.leodoncel.com

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

    ResponderEliminar
  9. 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 ???

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

    deberías quitar el echo

    ResponderEliminar
  11. 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;
    }

    ResponderEliminar
  12. perdón, al final debe poner return $cadena

    no return $tring

    ResponderEliminar
  13. Anónimo9:53 p. m.

    $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);

    ResponderEliminar
  14. Anónimo8:05 p. m.

    Muchas Gracias, si me sirve!

    ResponderEliminar
  15. Anónimo8:38 p. m.

    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;
    }

    ResponderEliminar
  16. 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;
    }

    ResponderEliminar
  17. Anónimo5:02 a. m.

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

    ResponderEliminar

Sé bueno. No hagas spam y no hagas que te modere.