blog personal
Quitar acentos y caracteres especiales en PHP
Por más que busqué no encontré funciones que quitaran los acentos eficientemente. Las que funcionaban medianamente bien, fallaban cuando los caracteres eran UTF-8, por lo que me puse en campaña, y llegué a esto:
function quitarAcentos($text) { $text = htmlentities($text, ENT_QUOTES, 'UTF-8'); $text = strtolower($text); $patron = array ( // Espacios, puntos y comas por guion '/[\., ]+/' => '-', // Vocales '/à/' => 'a', '/è/' => 'e', '/ì/' => 'i', '/ò/' => 'o', '/ù/' => 'u', '/á/' => 'a', '/é/' => 'e', '/í/' => 'i', '/ó/' => 'o', '/ú/' => 'u', '/â/' => 'a', '/ê/' => 'e', '/î/' => 'i', '/ô/' => 'o', '/û/' => 'u', '/ã/' => 'a', '/&etilde;/' => 'e', '/ĩ/' => 'i', '/õ/' => 'o', '/ũ/' => 'u', '/ä/' => 'a', '/ë/' => 'e', '/ï/' => 'i', '/ö/' => 'o', '/ü/' => 'u', '/ä/' => 'a', '/ë/' => 'e', '/ï/' => 'i', '/ö/' => 'o', '/ü/' => 'u', // Otras letras y caracteres especiales '/å/' => 'a', '/ñ/' => 'n', // Agregar aqui mas caracteres si es necesario ); $text = preg_replace(array_keys($patron),array_values($patron),$text); return $text; }
Cualquier comentario es bienvenido.
| Imprimir artículo | Este artículo fue publicado por bilson el 26 Mayo 2008 a las 19:26 pm, y está archivado en Sin categoría. Sigue las respuestas a esta entrada a través de RSS 2.0. Puedes dejar un comentario o enviar un trackback desde tu propio sitio. |

hace 1 año
Me sirvio la funcion que hiciste, te agradezco el aporte!
Saludos
[Reply]
hace 1 año
Probe varios metodos y fue el unico que me funciono. Gracias!
[Reply]
hace 1 año
lo mismo que el otro compi,,, me funciona y otras no lo hacían, he comentado l alínea ‘/ñ/’ => ‘n’, pq cuando buscaba por ñ aparecían las “n’s”
[Reply]
hace 1 año
Después de mucho buscar, esta es la solución que necessitava. Gracias
[Reply]
hace 1 año
Hola, yo uso esta función que recoge varias recopilaciones de código que he investigado y trabaja muy bien, lo uso para crear url’s limpias pero modificando un poco el código puedes obtener lo que desees y trabaja rápido:
function convert_to_alias($string) {
utf8_encode($string);
$a = array(“á”,”é”,”í”,”ó”,”ú”,”à”,”è”,”ì”,”ò”,”ù”,”ä”,”ë”,”ï”,”ö”,”ü”,”â”,”ê”,”î”,”ô”,”û”,”ñ”,”ç”,” “);
$b = array(“a”,”e”,”i”,”o”,”u”,”a”,”e”,”i”,”o”,”u”,”a”,”e”,”i”,”o”,”u”,”a”,”e”,”i”,”o”,”u”,”n”,”c”,”-”);
$string = str_replace($a, $b, $string);
$string = strtolower($string);
$string = ereg_replace(“[^A-Za-z0-9-]“, “”, $string);
return $string;
}
[Reply]
hace 1 año
Después de dos días buscando y probando miles de funciones con replace, al fin una que funciona de verdad… Gracias.
[Reply]
hace 1 año
UNA PAVADA COMO LOS ACENTOS ME LLEVO TODA UNA MANIANA HASTA QUE ENCONTRE ESTO !!!
GRACIAS !!!
[Reply]
hace 6 meses
muchas gracias artista
[Reply]
hace 6 meses
este tipo es un genio ! …. mis respetos maestro ! …saludos desde lima peru
[Reply]
hace 5 meses
Super, eres un bacan. Lo implementare en mi aplicacion.
[Reply]
hace 4 meses
Me has salvado amigo!
[Reply]
hace 2 meses
Después de dos horas de pruebas.
Esta funcion@ de verdad.
Gracias
[Reply]
hace 1 mes
lo unico que le agrege fue un trim al comienzo
.. $text = trim(strtolower($text));
para que quite los espacios adicionales!
muy buena funcion, gracias
[Reply]
hace 1 mes
me encontre con el problema de que si el texto que trataba tenia un guion en el por ej:
esto-es un ejemplo
me lo dejaba como
esto—es-un-ejemplo
por lo que le agregue
$text = trim(str_replace(‘-’, ‘ ‘, trtolower($text)));
reemplazo los guiones por espacios y hago un trim para sacar los que estan de más y después sigue como todo tu script
[Reply]