Cambiar acentos en PHP

Uno de los problemas mas comunes es la parte de los acentos en la programación, nadie dice que no pueden utilizarce, al contrario, puedes utilizar cuantos caracteres especiales quieras, en especial si se trata de POO, pero no es nada aconsejable, en especial al utilizar lenguajes orientados a la web. ¿Entonces como solventamos esto? simple, con un arreglo dentro de una función.

<?php
  function cambiar_url($url) {
    $url = strtolower($url);
    $buscar = array(' ', '&', 'rn', 'n', '+');
    $url = str_replace ($buscar, '-', $url);
    $buscar = array('á', 'é', 'í', 'ó', 'ú', 'ñ');
    $remplzr = array('a', 'e', 'i', 'o', 'u', 'n');
    $url = str_replace ($buscar, $remplzr, $url);
    $buscar = array('/[^a-z0-9-<>]/', '/[-]+/', '/<[^>]*>/');
    $remplzr = array('', '-', '');
    $url = preg_replace ($buscar, $remplzr, $url);
    return $url;
  }
?>

   Así de simple es cambiar acentos por las mismas letras sin la tilde, y los espacios quedan con un guón. Entonces explicando todo paso a paso la función se compone de lo siguiente. Primero pasamos todo a minúscula:

$url = strtolower($url);

   Luego creamos un arreglo que contendrá los caracteres o símbolos a buscar, lo llamamos por ejemplo "$buscar", y otro con los que serán reemplazados en la misma posición del arreglo anterior, podemos llamarlo "$remplzr". Después de esto hacemos lo mismo pero con un arreglo para los acentos (sin usar otras variables para no complicarnos), y el último es para otros caracteres especiales, tanto el de los espacios como caracteres especiales los reemplazamos por un guión ( - ), pero podemos cambiarlo por cualquier otra cosa que queramos, de modo que va así la función con respecto a los arreglos.

//Primer arreglo
$buscar = array(' ', '&', 'rn', 'n', '+');
$url = str_replace ($buscar, '-', $url);

//Segundo arreglo
$buscar = array('á', 'é', 'í', 'ó', 'ú', 'ñ');
$remplzr = array('a', 'e', 'i', 'o', 'u', 'n');
$url = str_replace ($buscar, $remplzr, $url);

//Tercer arreglo    
$buscar = array('/[^a-z0-9-<>]/', '/[-]+/', '/<[^>]*>/');
$remplzr = array('', '-', '');
$url = preg_replace ($buscar, $remplzr, $url);
return $url;

   Por último retornamos la variable y listo, ya solo queda llamar la función desde nuestro PHP.

<?php cambiar_url($mi_cadena) ?>

   Recomiendo utilizar esto mas que todo para un arreglo donde tengamos muchos enlaces con acentos o cuando cargamos data de una base de datos como nombres y queremos utilizarlos en enlaces y propiedades, todo es cuestión de probar y comprar resultados.