tener nombre de archivos con caracteres especiales, puede ser un dolor de cabeza, ya que si lo pones en un pc, es posible que no reconozca le nombre del archivo.
Como dice el otro compañero, recomiendo eliminar los caracteres especiales, si no puede prescindir de los accentos, mira en que codificación esta trabajando php los Strings.
EL código si no me acuerdo mal, no lo cree yo, pero al final lo acabo usando en todos los proyectos.
Código PHP:
function elimina_acentos($text) {
$text = htmlentities($text, ENT_QUOTES, 'UTF-8');
$text = strtolower($text);
$patron = array (
// Espacios, puntos y comas por guion
//'/[\., ]+/' => ' ',
// Vocales
'/\+/' => '',
'/à/' => 'a',
'/è/' => 'e',
'/ì/' => 'i',
'/ò/' => 'o',
'/ù/' => 'u',
'/á/' => 'a',
'/é/' => 'e',
'/í/' => 'i',
'/ó/' => 'o',
'/ú/' => 'u',
'/â/' => 'a',
'/ê/' => 'e',
'/î/' => 'i',
'/ô/' => 'o',
'/û/' => 'u',
'/ã/' => 'a',
'/&etilde;/' => 'e',
'/ĩ/' => 'i',
'/õ/' => 'o',
'/ũ/' => 'u',
'/ä/' => 'a',
'/ë/' => 'e',
'/ï/' => 'i',
'/ö/' => 'o',
'/ü/' => 'u',
'/ä/' => 'a',
'/ë/' => 'e',
'/ï/' => 'i',
'/ö/' => 'o',
'/ü/' => 'u',
// Otras letras y caracteres especiales
'/å/' => 'a',
'/ñ/' => 'n',
// Agregar aqui mas caracteres si es necesario
);
$text = preg_replace(array_keys($patron),array_values($patron),$text);
return $text;
}