utiliza una funcion para sacar todos esos caracteres raros, yo no se muchos de expresiones regulares asi q me hice esta funcion
Código PHP:
function arreglar_nom($txt){
$txt = strtolower(str_replace(" ","_",trim($txt)));
$txt = str_replace("[","",$txt);
$txt = str_replace("]","",$txt);
$txt = ereg_replace("[àâáä]","a",$txt);
$txt = ereg_replace("[íìîï]","i",$txt);
$txt = ereg_replace("[éèêë]","e",$txt);
$txt = ereg_replace("[óòôõö]","o",$txt);
$txt = ereg_replace("[úùûü]","u",$txt);
$txt = ereg_replace("[-\!·$%&/()=?¿|@#¬€*+,\'\"><¡;:^¨`´ñ€{}]","",$txt);
$txt = str_replace("ç","c",$txt);
$txt = str_replace("..",".",$txt);
$txt = str_replace("º","o",$txt);
$txt = str_replace("°","o",$txt);
$txt = str_replace("ª","a",$txt);
return $txt;
}
espero te sirva
saludos