Строковое кодирование PHP - PullRequest
       1

Строковое кодирование PHP

3 голосов
/ 14 сентября 2011

У меня есть страница, которая позволяет пользователям загружать файлы, хранящиеся в базе данных. Эта страница просто использует переменную GET, чтобы найти соответствующий идентификатор в таблице базы данных и вернуть файл в виде вложения в заголовок файла.

header("Content-length: $objFile->size");
header("Content-type: $objFile->type");
header("Content-Disposition: attachment; filename=".($objFile->name));

У меня возникает проблема, если файл, загруженный в базу данных, содержит пробел в имени, например, «3-летний анализ затрат. "из-за пробела в имени.

Я пробовал urlencode, rawurlencode и другие, но не получил ожидаемых результатов с полным именем файла.

1 Ответ

5 голосов
/ 14 сентября 2011

Поместите его в кавычки:

header('Content-Disposition: attachment; filename="'.($objFile->name).'"');

Здесь - соответствующая часть спецификации HTTP.

Обновление: Технически этодолжен читать

str_replace('"', '\\"', $objFile->name)

, потому что спецификация HTTP гласит, что символ двойной кавычки внутри quoted-string должен быть экранирован обратной косой чертой.На практике вы не ожидаете имен файлов с двойными кавычками (я даже не уверен, какие файловые системы это позволяют), но для 100% гарантированного соответствия необходим str_replace.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...