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”

  1. ricardo on Noviembre 14th, 2008 20:21 pm

    Me sirvio la funcion que hiciste, te agradezco el aporte!

    Saludos

    [Reply]

  2. David on Diciembre 4th, 2008 14:34 pm

    Probe varios metodos y fue el unico que me funciono. Gracias!

    [Reply]

  3. Javier on Diciembre 22nd, 2008 17:50 pm

    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]

  4. Juli on Enero 7th, 2009 6:23 am

    Después de mucho buscar, esta es la solución que necessitava. Gracias

    [Reply]

  5. Mike on Febrero 12th, 2009 1:06 am

    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]

  6. Andrés on Abril 24th, 2009 8:23 am

    Después de dos días buscando y probando miles de funciones con replace, al fin una que funciona de verdad… Gracias.

    [Reply]

  7. CHICHABEIBE on Agosto 13th, 2009 10:54 am

    UNA PAVADA COMO LOS ACENTOS ME LLEVO TODA UNA MANIANA HASTA QUE ENCONTRE ESTO !!!
    GRACIAS !!!

    [Reply]

  8. Jorge on Febrero 11th, 2010 14:48 pm

    muchas gracias artista

    [Reply]

  9. junior on Marzo 2nd, 2010 0:57 am

    este tipo es un genio ! …. mis respetos maestro ! …saludos desde lima peru

    [Reply]

Leave a Reply




Switch to our mobile site