PHP Función para quitar acentos y caracteres especiales

Muchas veces los caracteres especiales nos dan inconvenientes, en mi caso tengo problemas entre la comunicación de dos sistemas.
Cómo PHP no tiene una función nativa que haga esto hubo que hacerla a mano.
Aclaro que intente con la función strtr pero algunos caracteres no los tenia en cuenta y por eso esta función.

/**
* stripAccents()
* @description Esta función remplaza todos los caracteres especiales de un texto dado por su equivalente
* @author      Esteban Novo
* @link        http://www.notasdelprogramador.com/2011/01/13/php-funcion-para-quitar-acentos-y-caracteres-especiales/
* @access      public
* @copyright   Todos los Derechos Reservados
* @param       string $String
* @return      Retorna el nuevo String sin caracteres especiales
*/
Function stripAccents($String)
{
    $String = ereg_replace("[äáàâãª]","a",$String);
    $String = ereg_replace("[ÁÀÂÃÄ]","A",$String);
    $String = ereg_replace("[ÍÌÎÏ]","I",$String);
    $String = ereg_replace("[íìîï]","i",$String);
    $String = ereg_replace("[éèêë]","e",$String);
    $String = ereg_replace("[ÉÈÊË]","E",$String);
    $String = ereg_replace("[óòôõöº]","o",$String);
    $String = ereg_replace("[ÓÒÔÕÖ]","O",$String);
    $String = ereg_replace("[úùûü]","u",$String);
    $String = ereg_replace("[ÚÙÛÜ]","U",$String);
    $String = ereg_replace("[^´`¨~]","",$String);
    $String = str_replace("ç","c",$String);
    $String = str_replace("Ç","C",$String);
    $String = str_replace("ñ","n",$String);
    $String = str_replace("Ñ","N",$String);
    $String = str_replace("Ý","Y",$String);
    $String = str_replace("ý","y",$String);
    return $String;
}

Y la invocamos de esta forma:

echo stripAccents("àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ`^´");
// Resultado
// aaaaaceeeeiiiinooooouuuuyAAAAACEEEEIIIINOOOOOUUUUY
  • Sir George

    Gracias por el script. Justo lo que necesitaba. Funciona de coña marinera.

  • http://www.royalkerkushotel.com luis marino

    Tengo un problemita con las tildes y caracteres especiales cuando muestro de mi base de datos; quiero que me salga con todo tildes pero salen codigos raros…algo asi:

    (KUELAP-CHACHAPOYAS
    Sitio arqueol�gico del Per� construido por la cultura Chachapoyas. Forma parte un conjunto arquitect�nico de piedras de grandes dimenciones, ubicado en lo alto de una monta�a a 3.000 msnm. Se encuentra al margen izquierdo del r�o Utcubanba, en la provincia de Luya.)…

    no me muestran las tildes y otros….
    como puedo hacer.

    • http://www.novalsoft.com admin

      Es un problema de codificación de caracteres, lo mas seguro los datos en tu DB esten en UTF8, proba esto, en el Head de tu página declararla como UTF8, algo así:

      y cuando escribís el resultado capturado desde la base con PHP, usa la función utf8_encode(“aqui tu contenido de la db”) o utf8_decode(“aqui tu contenido de la db”), no me acuerdo cual de ellas.

      Espero te sirva!

  • Ikki

    Lo de los corchestes no funciona, abría que hacerlo metiendolo dentro de un array. Quedaría así: function limpiar($String){
    $String = str_replace(array(‘á’,’à’,’â’,’ã’,’ª’,’ä’),”a”,$String);
    $String = str_replace(array(‘Á’,’À’,’Â’,’Ã’,’Ä’),”A”,$String);
    $String = str_replace(array(‘Í’,’Ì’,’Î’,’Ï’),”I”,$String);
    $String = str_replace(array(‘í’,’ì’,’î’,’ï’),”i”,$String);
    $String = str_replace(array(‘é’,’è’,’ê’,’ë’),”e”,$String);
    $String = str_replace(array(‘É’,’È’,’Ê’,’Ë’),”E”,$String);
    $String = str_replace(array(‘ó’,’ò’,’ô’,’õ’,’ö’,’º’),”o”,$String);
    $String = str_replace(array(‘Ó’,’Ò’,’Ô’,’Õ’,’Ö’),”O”,$String);
    $String = str_replace(array(‘ú’,’ù’,’û’,’ü’),”u”,$String);
    $String = str_replace(array(‘Ú’,’Ù’,’Û’,’Ü’),”U”,$String);
    $String = str_replace(array(‘[','^','´','`','¨','~',']‘),””,$String);
    $String = str_replace(“ç”,”c”,$String);
    $String = str_replace(“Ç”,”C”,$String);
    $String = str_replace(“ñ”,”n”,$String);
    $String = str_replace(“Ñ”,”N”,$String);
    $String = str_replace(“Ý”,”Y”,$String);
    $String = str_replace(“ý”,”y”,$String);
    return $String;
    }

    • Pablo

      Muchas gracias Ikki, El script del post está escrito para una versión anterior de PHP y en las >5.3 “ereg_replace” está obsoleto (deprecated).

      • Pablo

        No obstante, ya podías haberlo escrito con ‘ en lugar de ` y ´ …

        • Pablo

          La culpa es del wordpress, ahora me doy cuenta.

      • http://www.novalsoft.com Esteban Novo

        Es verdad, cuando pueda lo actualizo!

  • Ikki

    Lo cierto es que funciona, pero hayq ue sustituuit donde pone ereg_replace por str_replace

  • raul

    amigo estuve probando esto y no me dio resultado