2014-11-30 1 views
1

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

Но почему же fordward слэш преобразуются в тире/тире при использовании

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

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

загруженный файл имеет имя файла -file

Является ли это поведение описано где-то?

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

+3

Поскольку заголовок должен иметь имя файла, а не путь. Вот почему '/' недействителен в имени файла. –

+0

[Check this Q & A] (http://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content-disposition-header-in-http) – anubhava

+0

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

ответ

3

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

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

Агент принимающий пользователь не должен уважать любую информацию о пути каталога, присутствующую в параметре имя_файла-PARM, который является единственным параметром, как полагают, относятся к HTTP-реализации в настоящее время. Имя файла ДОЛЖНО считаться только терминальным компонентом.
Сеть Рабочая группа, Р. Филдинг и др (с) Internet Society (1999)

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

+0

ОК, имеет смысл, но поскольку он является клиентом-specidif, не так ли он неточен, поскольку он может отличаться от cleint to client ? не следует ли заменять косую черту нужным символом, например, подчеркивание или тире/дефис? –

+1

Последнее и конкретное определение содержится в [rfc6266] (https://tools.ietf.org/html/rfc6266#page-5), что даже рекомендует замену символов. Он не предписывает, как и когда, поскольку существуют различия между платформой и платформой, что составляет специальные символы. – mario

+0

, поэтому лучше заменить эти косые черты прямо на PHP вместо того, чтобы полагаться на клиент и платформу. Хорошо, спасибо за ссылку на rfc –

Смежные вопросы