Buenos dias,
creo que la mejor solución a tu problema es revisar los nombres antes de guardar el archivo, y guardarlo con un nombre sin caracteres especiales, para esto:
Código PHP:
$original = array(" ", "'", "?", "/", "+", "á", "é", "í", "ó", "ú", "Á", "É", "Í", "Ó", "Ú", "ñ", "Ñ");
$sustitucion = array("_", "_", "_", "_", "mas", "a", "e", "i", "o", "u", "A", "E", "I", "O", "U", "n", "N");
$STRING = str_replace($original, $sustitucion, $STRING);
primero se crean dos arrays, con el caracter especial y su correspondencia, despues con str_replace sustituimos.
Creo que de esta forma quedará solucionado tu problema.
PD, si ya tienes información en la base de datos, te recomiendo que crees un pequeño script para modificar toda esta información de la tabla de tu base de datos.
saludos