Reemplazar la ñ, acentos y espacios en PHP
[Actualizado] Hoy que tengo un poco de tiempo actualicé el snippet con mas caracteres y reemplace la función ereg_replace() porque en la versión de PHP 5.3 ya queda totalmente deprecada.
Pequeña función para reemplazar acentos, ñ y espacios.
function limpiar_caracteres_especiales($s) {
$s = ereg_replace("[áàâãª]","a",$s);
$s = ereg_replace("[ÁÀÂÃ]","A",$s);
$s = ereg_replace("[éèê]","e",$s);
$s = ereg_replace("[ÉÈÊ]","E",$s);
$s = ereg_replace("[íìî]","i",$s);
$s = ereg_replace("[ÍÌÎ]","I",$s);
$s = ereg_replace("[óòôõº]","o",$s);
$s = ereg_replace("[ÓÒÔÕ]","O",$s);
$s = ereg_replace("[úùû]","u",$s);
$s = ereg_replace("[ÚÙÛ]","U",$s);
$s = str_replace(" ","-",$s);
$s = str_replace("ñ","n",$s);
$s = str_replace("Ñ","N",$s);
//para ampliar los caracteres a reemplazar agregar lineas de este tipo:
//$s = str_replace("caracter-que-queremos-cambiar","caracter-por-el-cual-lo-vamos-a-cambiar",$s);
return $s;
}
Especialmente util para nombres de archivos y URL’s.

¿no faltan las vocales con diéresis cómo ü Ä etc?
y que te parece eliminar los símobolos tipo: & ¿? \
gracias por tu código, aquí te pongo el código algo modificado.
function limpiar(text)
{
var text = text.toLowerCase(); // a minusculas
text = text.replace(/[áàäâå]/g, ‘a’);
text = text.replace(/[éèëê]/g, ‘e’);
text = text.replace(/[íìïî]/g, ‘i’);
text = text.replace(/[óòöô]/g, ‘o’);
text = text.replace(/[úùüû]/g, ‘u’);
text = text.replace(/[ýÿ]/g, ‘y’);
text = text.replace(/[ñ]/g, ‘n’);
text = text.replace(/[ç]/g, ‘c’);
text = text.replace(/['"]/g, ”);
text = text.replace(/[^a-zA-Z0-9-]/g, ‘ ‘); //text = text.replace(/\W/g, ‘ ‘);
text = text.replace(/\s+/g, ‘-’);
text = text.replace(/(_)$/g, ”);
text = text.replace(/^(_)/g, ”);
return text;
}