Quitar acentos y caracteres especiales en PHP
Posted on Mayo 26, 2008
Filed Under Sin categoría | 9 Comments
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.
Comments
9 Responses to “Quitar acentos y caracteres especiales en PHP”
Leave a Reply

Me sirvio la funcion que hiciste, te agradezco el aporte!
Saludos
[Reply]
Probe varios metodos y fue el unico que me funciono. Gracias!
[Reply]
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]
Después de mucho buscar, esta es la solución que necessitava. Gracias
[Reply]
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]
Después de dos días buscando y probando miles de funciones con replace, al fin una que funciona de verdad… Gracias.
[Reply]
UNA PAVADA COMO LOS ACENTOS ME LLEVO TODA UNA MANIANA HASTA QUE ENCONTRE ESTO !!!
GRACIAS !!!
[Reply]
muchas gracias artista
[Reply]
este tipo es un genio ! …. mis respetos maestro ! …saludos desde lima peru
[Reply]