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.


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]
Super, eres un bacan. Lo implementare en mi aplicacion.
[Reply]
Me has salvado amigo!
[Reply]
Después de dos horas de pruebas.
Esta funcion@ de verdad.
Gracias
[Reply]
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]
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]
Excelente función me ayudó mucho, tenía muchos problemas con la codificación UTF-8 y las funciones de acentos. Gracias.
[Reply]
Agradecido, fue la uncia funcion que realmente me soluciono el problema.
[Reply]
Eres un crack Rodrigo, la única función que me ha funcionado y mira que hay ejemplos por ahí sueltos. Ya te guardé en delicious
[Reply]
Excelente!! Funciona de lujo.
[Reply]
Mil Millones de Gracias…Despues de 3, 4, o 5 horas…La solución definitiva!
[Reply]
A mi no me funciona amigo…no hace ningún cambio con mi cadena…
[Reply]
me sirvio mucho tu aporte, justo lo que andaba buscando
[Reply]
Mil gracias por este segmento de codigo que de verdad a los que estamos comenzando en esto nos quita un gran peso de encima ademas de ayudarnos a entender la logica de programacion
[Reply]
Gracias por tu función… una pregunta:
¿como hago para agregar el ampersan (&) y me lo reemplace por un guion por ejemplo.?
[Reply]
Muchas Gracias me sirvio para quitar los molestos signos de mi rss.php
[Reply]
Esta es una modificación que realicé para una aplicación:
function quitarAcentos($text,$cab=0,$snan=0,$sub=”,$cr=”) {
// $text Cadena a procesar.
// $cab Cambiar ALTAS-bajas: 0=no, 1=todas altas, 2=todas bajas.
// $snan Sustituir no alfanumericas: 0=no, 1=todo, 2=las listadas, 3=las no listadas.
// $sub Caracteres sustitutos (vacío para eliminar)(ver $snan).
// $cr Caracteres no alfanumericos a buscar (ver $snan).
$text = htmlentities($text, ENT_QUOTES, ‘UTF-8′);
$patron = array (
‘/&(.)grave;/’,
‘/&(.)acute;/’,
‘/&(.)circ;/’,
‘/&(.)tilde;/’,
‘/&(.)uml;/’,
‘/&(.)ring;/’,
‘/&(.)cedil;/’,
);
$text = preg_replace($patron,’$1′,$text);
$text = html_entity_decode($text, ENT_QUOTES, ‘UTF-8′);
if (($snan>1)&&($cr!=”)) {
$cr=’\Q’.$cr.’\E’;
if ($snan==2) $cr=’/['.$cr.']+/’; else $cr=’/[^A-Za-z0-9'.$cr.']+/’;
$text = preg_replace($cr, $sub, $text );
} else {
if ($snan==1) $text = preg_replace(‘/[^A-Za-z0-9]+/’, $sub, $text );
}
if ($cab==1) $text=strtoupper($text);
else if ($cab==2) $text = strtolower($text);
return $text;
}
[Reply]
function quitarAcentos($text,$cab=0,$snan=0,$sub='',$cr='') {
// $text Cadena a procesar.
// $cab Cambiar ALTAS-bajas: 0=no, 1=todas altas, 2=todas bajas.
// $snan Sustituir no alfanumericas: 0=no, 1=todo, 2=las listadas, 3=las no listadas.
// $sub Caracteres sustitutos (vacío para eliminar)(ver $snan).
// $cr Caracteres no alfanumericos a buscar (ver $snan).
$text = htmlentities($text, ENT_QUOTES, 'UTF-8');
$patron = array (
'/&(.)grave;/',
'/&(.)acute;/',
'/&(.)circ;/',
'/&(.)tilde;/',
'/&(.)uml;/',
'/&(.)ring;/',
'/&(.)cedil;/',
);
$text = preg_replace($patron,'$1',$text);
$text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
if (($snan>1)&&($cr!='')) {
$cr='\Q'.$cr.'\E';
if ($snan==2) $cr='/['.$cr.']+/'; else $cr='/[^A-Za-z0-9'.$cr.']+/';
$text = preg_replace($cr, $sub, $text );
} else {
if ($snan==1) $text = preg_replace('/[^A-Za-z0-9]+/', $sub, $text );
}
if ($cab==1) $text=strtoupper($text);
else if ($cab==2) $text = strtolower($text);
return $text;
}
[Reply]
Muchas Gracias!!! Me ha servido mucho, anduve buscando mucho tiempo esto y no encontraba algo que funcionara también
[Reply]