почему косая черта преобразуется в дефис / тире

Я знаю, что мы должны заменить косые черты и, например, взорвать путь и использовать последний элемент массива в качестве имени файла.

Но почему прямая косая черта преобразуется в дефис / тире при использовании

header('Content-Disposition: attachment; filename="'.$local_file.'"');

когда $local_file это что-то вроде /file

скачанный файл имеет имя файла -file

Это поведение описано где-то?

В документе RFC не упоминается об этом или нет?
http://www.faqs.org/rfcs/rfc2183.html

1

Решение

Это зависит от клиента. Большинство браузеров просто отбрасывают любой путь/ префиксы. Но перекодировка косых черт будет такой же надежной.

Это упоминается в RFC2616, http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html, раздел 19.5.1

Принимающий пользовательский агент НЕ ДОЛЖЕН учитывать информацию о пути к каталогу, присутствующую в параметре filename-parm, который является единственным параметром, который, как считается, применяется в настоящее время к реализациям HTTP. Имя файла ДОЛЖНО рассматриваться только как компонент терминала.
Сетевая рабочая группа, Р. Филдинг и др., (C) Интернет-общество (1999)

Разумеется, по соображениям безопасности полезная нагрузка HTTP не должна извлекаться в какой-либо заранее заданный путь.

3

Другие решения

Других решений пока нет …