En ocasiones resulta útil quitar las tildes o acentos de una cadena, en especial cuando queremos usarla como una URL, aunque podemos tener diversos motivos. Además también vamos a reemplazar otras letras como la ñ y la cecilla.
Para ello usamos la función str_replace y le pasamos como primer parámetro el array de letras que queremos reemplazar en la cadena, como segundo parámetro el array con las letras por las que queremos sustituir las anteriores y como tercer parámetro la cadena sobre la que queremos realizar la acción. Dividiremos la acción en cinco partes para que el código sea algo más legible. Además, es importante que si nos da errores u obtenemos caracteres extraños en el resultado, nos aseguremos de que la cadena está codificada como UTF8 para evitar problemas con el juego de caracteres; de lo contrario, no es necesario realizar esta tarea, puesto que nos dará problemas adicionales.
function eliminar_tildes($cadena){
//Codificamos la cadena en formato utf8 en caso de que nos de errores
$cadena = utf8_encode($cadena);
//Ahora reemplazamos las letras
$cadena = str_replace(
array('á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä'),
array('a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A'),
$cadena
);
$cadena = str_replace(
array('é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë'),
array('e', 'e', 'e', 'e', 'E', 'E', 'E', 'E'),
$cadena );
$cadena = str_replace(
array('í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î'),
array('i', 'i', 'i', 'i', 'I', 'I', 'I', 'I'),
$cadena );
$cadena = str_replace(
array('ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô'),
array('o', 'o', 'o', 'o', 'O', 'O', 'O', 'O'),
$cadena );
$cadena = str_replace(
array('ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü'),
array('u', 'u', 'u', 'u', 'U', 'U', 'U', 'U'),
$cadena );
$cadena = str_replace(
array('ñ', 'Ñ', 'ç', 'Ç'),
array('n', 'N', 'c', 'C'),
$cadena
);
return $cadena;
}
Si tenemos la cadena en una variable llamada $variable, sencillamente tenemos que pasársela a la función:
$variable= eliminar_tildes($variable);
En caso de querer usar esta cadena como URL también tendríamos que asegurarnos de que otros caracteres no están presentes, siendo más adecuada la función:
$cadena = preg_replace("/[^a-zA-Z0-9\_\-]+/", "", $cadena);
Fácil y para toda la familia.
Gracias, siempre es bienvenido un código como este.
Funciona Perfecto.
Gracias por tu aportación
Saludos.
También puedes usar algo como esto:
iconv(«utf-8», «ascii//TRANSLIT», $cadena)
Genial, gran ayuda y muy claro
Muchas Gracias!
Limpio y elegante, muchas gracias por compartirlo.
$cadena= eliminar_acentos($cadena);
function eliminar_acentos($cadena){
$especial = utf8_decode(«ÁÀÂÄáàäâªÉÈÊËéèëêÍÌÏÎíìïîÓÒÖÔóòöôÚÙÛÜúùüûÑñÇç»);
$reemplazar = utf8_decode(«AAAAaaaaaEEEEeeeeIIIIiiiiOOOOooooUUUUuuuuNnCc»);
for($i=0; $i<=strlen($cadena); $i++)
{
for($f=0; $f<strlen($especial); $f++)
{
$caracteri= substr($cadena,$i,1);
$caracterf= substr($especial,$f,1);
if($caracteri===$caracterf)
{
$cadena = substr($cadena,0,$i).substr($reemplazar,$f,1).substr($cadena,$i+1);
}
}
}
return $cadena;
}
Grandioso programa, muchas gracias
no especifica donde interactua esto… osea si yo tengo un parrafo, donde busca esto?
deberia tener $cadena = $texto o algo asi y que el texto sea el parrafo a editar.