PHP « Очистка имени файла от запрещенных символов
Приветствую!
При сохранении файла ему присваивается имя из строки, которая может содержать любые символы.
Соответственно, вопрос - каким образом лучше всего избавиться от символов "/", "?" и прочего?
"Сохранение файла" - имеется ввиду диалог браузера "сохранить как".
При сохранении файла ему присваивается имя из строки, которая может содержать любые символы.
Соответственно, вопрос - каким образом лучше всего избавиться от символов "/", "?" и прочего?
"Сохранение файла" - имеется ввиду диалог браузера "сохранить как".
1 ответов
Я бы посоветовал не убирать некие запрещённые символы, а составить список разрешённых, во избежание сюрпризов. Для проверки можно использовать символьные классы в регулярном выражении.
<?php
preg_match('/[-._[:alnum:]]+/', $filename)
здесь я достаточно сильно ограничил имя. Также отдельно стоит обработать имена "." и "..", которые проходят проверку.
А где Вы эту строку то берете? URL?
Чтобы при сохранении файла броузер не пытался предлагать в качестве имени файла всякую чебурду слепленную из урла, высылайте заголовок:
header('Content-Disposition: attachment; filename="<Красивое имя файла>"');
А просто так забраться в диалог сохранения и подсунуть туда или изменить имя файла никто не даст. Песочница однако. А диалог сохранения уже за ее пределами.