Encontré una solución parche, pero acepto sugerencias si hay algo definitivo para resolver mi problema.
Al aplicar utf8_encode a la variable $url me dejó con algunos caracteres raros mi cadena. De esa manera averigüé cuál caracter raro corresponde a cada vocal con acento y asunto resuelto:
á = ã¡
é = ã©
í = ã*
ó = ã³
ú = ãº
ñ = ã±
Pero solo funciona con cadenas que estén completamente en minúsculas.
De esta manera el resultado final de la función quedaría así...
Código PHP:
function amigables($url) {
// Tranformamos todo a minusculas
$url = strtolower($url);
// Cambiamos los caracteres especiales latinos
$acentos = array("á","é","í","ó","ú","ñ");
$normal = array("a","e","i","o","u","n");
$url = str_replace($acentos, $normal, $url);
// Convierto la cadena a utf8
$url = utf8_encode($url);
//Rememplazamos caracteres especiales
$especiales = array("ã¡","ã©","ã*","ã³","ãº","ã±");
$normal = array("a","e","i","o","u","n");
$url = str_replace($especiales, $normal, $url);
// Ahora cambiamos algunos otros caracteres especiales y códigos por un guión
$find = array(' ', '&', '\r\n', '\n', '+');
$url = str_replace ($find, '-', $url);
// Se eliminan los siguientes caracteres que en una URL no nos interesan
$order = array('°','.',"'",'"',':','@','#','$','%','&','/','=','?','¡','¿','!','[',']','{','}',')','(',',');
$replace = "";
$url = str_replace($order, $replace, $url);
return $url;
}
Como les dije, si alguien sabe de alguna solución definitiva agradezco los comentarios.