Eliminar acentos con PHP

PHP

En ocasiones resulta útil quitar las tildes o acentos de una cadena, en especial cuando queremos usarla como una URL, aunque podemos tener diversos motivos. Además también vamos a reemplazar otras letras como la ñ y la cecilla.

Para ello usamos la función str_replace y le pasamos como primer parámetro el array de letras que queremos reemplazar en la cadena, como segundo parámetro el array con las letras por las que queremos sustituir las anteriores y como tercer parámetro la cadena sobre la que queremos realizar la acción. Dividiremos la acción en cinco partes para que el código sea algo más legible. Además, es importante que si nos da errores u obtenemos caracteres extraños en el resultado, nos aseguremos de que la cadena está codificada como UTF8 para evitar problemas con el juego de caracteres; de lo contrario, no es necesario realizar esta tarea, puesto que nos dará problemas adicionales.

function eliminar_tildes($cadena){

    //Codificamos la cadena en formato utf8 en caso de que nos de errores
    $cadena = utf8_encode($cadena);

    //Ahora reemplazamos las letras
    $cadena = str_replace(
        array('á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä'),
        array('a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A'),
        $cadena
    );

    $cadena = str_replace(
        array('é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë'),
        array('e', 'e', 'e', 'e', 'E', 'E', 'E', 'E'),
        $cadena );

    $cadena = str_replace(
        array('í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î'),
        array('i', 'i', 'i', 'i', 'I', 'I', 'I', 'I'),
        $cadena );

    $cadena = str_replace(
        array('ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô'),
        array('o', 'o', 'o', 'o', 'O', 'O', 'O', 'O'),
        $cadena );

    $cadena = str_replace(
        array('ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü'),
        array('u', 'u', 'u', 'u', 'U', 'U', 'U', 'U'),
        $cadena );

    $cadena = str_replace(
        array('ñ', 'Ñ', 'ç', 'Ç'),
        array('n', 'N', 'c', 'C'),
        $cadena
    );

    return $cadena;
}

Si tenemos la cadena en una variable llamada $variable, sencillamente tenemos que pasársela a la función:

$variable= eliminar_tildes($variable);

En caso de querer usar esta cadena como URL también tendríamos que asegurarnos de que otros caracteres no están presentes, siendo más adecuada la función:

$cadena = preg_replace("/[^a-zA-Z0-9\_\-]+/", "", $cadena);

Fácil y para toda la familia.


Avatar de Edu Lazaro

Edu Lázaro: Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

Si quieres conocer mis proyectos, sígueme en Twitter.

9 comentarios en “Eliminar acentos con PHP

  1. $cadena= eliminar_acentos($cadena);

    function eliminar_acentos($cadena){
    $especial = utf8_decode(«ÁÀÂÄáàäâªÉÈÊËéèëêÍÌÏÎíìïîÓÒÖÔóòöôÚÙÛÜúùüûÑñÇç»);
    $reemplazar = utf8_decode(«AAAAaaaaaEEEEeeeeIIIIiiiiOOOOooooUUUUuuuuNnCc»);
    for($i=0; $i<=strlen($cadena); $i++)
    {
    for($f=0; $f<strlen($especial); $f++)
    {
    $caracteri= substr($cadena,$i,1);
    $caracterf= substr($especial,$f,1);
    if($caracteri===$caracterf)
    {
    $cadena = substr($cadena,0,$i).substr($reemplazar,$f,1).substr($cadena,$i+1);
    }
    }
    }
    return $cadena;
    }

  2. no especifica donde interactua esto… osea si yo tengo un parrafo, donde busca esto?
    deberia tener $cadena = $texto o algo asi y que el texto sea el parrafo a editar.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

“- Hey, Doc. No tenemos suficiente carretera para ir a 140/h km. - ¿Carretera? A donde vamos, no necesitaremos carreteras.”