PHP « Очистка имени файла от запрещенных символов

Приветствую!
При сохранении файла ему присваивается имя из строки, которая может содержать любые символы.
Соответственно, вопрос - каким образом лучше всего избавиться от символов "/", "?" и прочего?

"Сохранение файла" - имеется ввиду диалог браузера "сохранить как".

1 ответов



$name = str_replace(array("/","|","\\", "?", ":", ";"), "", $badname);

Я бы посоветовал не убирать некие запрещённые символы, а составить список разрешённых, во избежание сюрпризов. Для проверки можно использовать символьные классы в регулярном выражении.


<?php
preg_match('/[-._[:alnum:]]+/', $filename)
  здесь я достаточно сильно ограничил имя. Также отдельно стоит обработать имена "." и "..", которые проходят проверку.

А где Вы эту строку то берете? URL?
Чтобы при сохранении файла броузер не пытался предлагать в качестве имени файла всякую чебурду слепленную из урла, высылайте заголовок:


header('Content-Disposition: attachment; filename="<Красивое имя файла>"');
 

А просто так забраться в диалог сохранения и подсунуть туда или изменить имя файла никто не даст. Песочница однако. А диалог сохранения уже за ее пределами.