Comparto con ustedes esta función que cree hace un tiempo para hacer URL amigables:
Código PHP:
/**
Formato:
{id} se reemplaza por el ID pasado en el 2do argumento
{titulo} se reemplaza por el titulo creado por la funcion
*/
function urlAmigable($titulo, $id, $formato = "", $suffix = "", $palabrasCensuradas = array()) {
$wrong = array('á', 'é', 'í', 'ó', 'ú', 'ñ', 'Á', 'É', 'Í', 'Ó', 'Ú', 'Ñ', 'ç', 'ü');
$right = array('a', 'e' ,'i', 'o', 'u', 'n', 'A', 'E', 'I', 'O', 'U', 'N', 'c', 'u');
//Reemplaza los caracteres especiales
$titulo = str_replace($wrong, $right, $titulo);
//Pone la cadena en minisculas
$titulo = strtolower($titulo);
//Reemplaza todo lo que no sean letras ni numeros por "-"
$titulo = preg_replace("/[^a-z0-9]+/", "-", $titulo);
//Elimino los "-" al principio y final de la cadena
$titulo = trim($titulo, '-');
//Separo la cadena en un array, usando "-" como delimitador
$palabras = explode("-", $titulo);
$censuradas = array("a", "en", "el", "un", "la", "una", "o", "se", "de", "del");
$censuradas = array_merge($censuradas, $palabrasCensuradas);
//Usando array_diff, a mi array antes obtenido le resto el array de palabras comunes
$palabras = array_diff($palabras, $censuradas);
//Vuelvo a "pegar" la cadena
$titulo = implode("-", $palabras);
//Vuelvo id a su valor numerico
$id = intval($id);
if ( ! empty($formato)) {
$plantilla = array('{id}', '{titulo}');
$reemplazo = array($id, $titulo);
$url = str_replace($plantilla, $reemplazo, $formato);
$url .= $suffix;
} else $url = "$titulo-$id$suffix";
//Retorno la URL amigable
return $url;
}
Ejemplo de Uso:
Código PHP:
echo urlAmigable("[APORTE] Función para crear URLs amigables", 5, "{id}/{titulo}", ".html", array("para"));
Resultado:
Cita: 5/aporte-funcion-crear-urls-amigables.html
Si tienen alguna pregunta, comentario, critica, sugerencia, no duden en ponerlas.
EDIT: Le corregi un error del que no me habia dado cuenta y aplique la sugerencia de pateketrueke.