Categorías: Tutoriales

Quitar acentos y eñes con PHP

Cuando trabajamos con cadenas con acentos, eñes y otros símbolos no compatibles en ciertos entornos, en ocasiones, hemos de sustituirlas por sus equivalentes para poder ofrecer el resultado deseado (por ejemplo, sustituir á por a).

En PHP este problema es bastante frecuente y encima, se ve agravado porque funciones como strstr tienen problemas cuando trabajamos con codificaciones como UTF-8. Os traigo una función que os permitirá atajar este problema, os la dejo a continuación:

<?php
function normaliza ($cadena){
    $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ
ßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';
    $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuy
bsaaaaaaaceeeeiiiidnoooooouuuyybyRr';
    $cadena = utf8_decode($cadena);
    $cadena = strtr($cadena, utf8_decode($originales), $modificadas);
    $cadena = strtolower($cadena);
    return utf8_encode($cadena);
}
?>

Si queréis agregar más caracteres a convertir, sólo tenéis que introducirlos al final de los vectores: originales y modificadas; en su misma posición.

F. Javier Carazo Gil

Cofundador de CODECTION, empresa especializada en WordPress, autor de un libro sobre WordPress (el primero en español) y multitud de artículos (en medios físicos y virtuales) sobre el tema. Participa en la comunidad WordPress de forma activa siendo parte del equipo organizador de la WordPress Meetup de Córdoba, dando charlas en diferentes WordCamp y siendo autor y coautor de multitud de plugins libres y premium para WordPress de gran éxito.

Ver comentarios

  • y si cambiamos eso por algo mas facil
    ejemplo:

    $charset='ISO-8859-1'; // o 'UTF-8'
    $str = iconv($charset, 'ASCII//TRANSLIT', $str);

    :)

    • Diego,

      Gracias por tu método, no conocía la función iconv() y la verdad que es genial su uso.

      Ya decía yo que tenía que existir algo así por parte de la tecnología.

    • Y no te olvides de quitar luego todos los acentos de la transliteración.

      $nuevo = preg_replace("/[^A-Za-z0-9 ]/", '', $str);

      • Eres una máquina ! ;-) Pero para que funcione realmente bien y no sustituya los caracteres
        especiales por símbolos de interrogación primero hay que utilizar
        setlocale:
        setlocale(LC_ALL, 'en_US.UTF8');

    • Oh que bonito. Yo el iconv si lo he usado pero no me dí cuenta. Las mejores soluciones siempre son las más simples.

  • Gracias @e7ab7600568448277ddffe1386de0737:disqus tu solución funciona y es mucho más sencilla de implementar

    • Cuando te las has visto putas convirtiendo desde un "packed javascript" en unicode a UTF8 ya nada te sorprende.

      Internet está plagado de funciones ultra-cargadas con más de 10!! líneas. KISS por favor.

      Muy acertado Diego ;)

      • En el caso de gente que no pueda instalar componentes de PHP, siempre se puede usar la solución inicial del post con los comentarios que le siguen sobre los acentos y carácteres especiales. Siempre mejor intentar instalar iconv pidiendolo al proveedor. A veces lo hacen.

  • Excelente tu funcion le agrege el caracter ' por un espacio, me funciono de maravillas, he probado iconv y otras funciones y ninguna me ayudo a lo que yo buscaba. Gracias.

Entradas recientes

DeepSeek

3 días hace

Contacto

2 semanas hace

Smart-tv mute

2 semanas hace

STEAM OS

3 semanas hace

2025

1 mes hace

El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.

1 mes hace