Я обычно никогда не смотрю на имя файла из переменной name (куда браузеры могут подставить любое имя и в худшем случае передать туда какую-то дичь), а вычисляю хэш от содержимого файла и называю файл по этому хэшу (+ расширение, если оно нужно, но обычно не требуется). В итоге убиваю двух зайцев - во-первых, имя файла гарантированно не содержит никаких запрещённых символов, во-вторых, обеспечивается дедупликация (если двое загрузят одинаковый файл - то физически он будет в одном экземпляре, но при удалении нужно учитывать счётчик ссылок и физически удалять только тогда, когда других записей, ссылающихся на файл, больше нет).