Definitivamente no puedes controlar que los usuarios suban archivos con caracteres especiales (tildes, espacios, etc.), pero sí puedes renombrarlos a la hora de guardarlos, revisa esto:
http://www.forosdelweb.com/f18/ayuda...3/#post2708313
Si no proporcionas el tercer parámetro de mb_convert_encoding() PHP "creerá" que la cadena está en "codificación interna", donde supongo que se refiere a la especificada en php.ini y no a la del sistema operativo.
Prueba haciendo echo del mismo título, pero pasándolo por varias funciones, a ver cuál resulta:
echo utf8_encode($titulo) . ' - ' . utf8_decode($titulo) . ' - alguna otra función';
Por último, revisa otras funciones multibyte de PHP como
http://php.net/manual/es/function.mb-check-encoding.php