2017-01-19 2 views
0

У меня есть код:специальные символы в имени файла не отображается правильно в MPDF

$mpdf = new mPDF(); 
    $mpdf->WriteHTML('some html text'); 
    return $mpdf->Output("[email protected]#$%^&*()_+<><?:}{P}" . '.pdf', 'I'); 

Но когда я сохранить документ в имени файла вместо символов <>?: отображает -----. Можно ли исправить?

+0

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

+0

Система linux mint 17. Может быть, это не очень хорошая идея, но я должен это сделать – Artem

+0

Тем не менее, браузер попытается помешать вам стрелять себе в ногу. –

ответ

2

Прежде всего, этот вопрос не имеет ничего общего с созданием PDF. Вы хотите создать объект файловой системы с именем, которое включает в себя символы, которые имеют особое значение в некоторых оболочках:

  • < является оператором ввода redirecton
  • > является перенаправление вывода оператора
  • ? является любой символ подстановочные
  • : это буква диска Windows, сепаратор

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

Некоторые файловые системы (не все) обрабатывают имена объектов как необработанные байтовые строки и не налагают никаких условий. Я помню, что я мог создавать файлы в старом блоке Unix, который содержал символ * и линию, после того, как я прочитал книгу, которая объяснила, что это возможно. Тем не менее, имя файла проходит через несколько слоев программного обеспечения, многие из которых действительно должны понимать имя, а некоторые из них, возможно, налагают дополнительные ограничения на файлы самой файловой системы. Таким образом, даже если вам удастся создать файл, вы, возможно, не сможете его прочитать позже.

По этой причине браузер активно удаляет проблемные символы. В некоторых случаях это может быть чрезмерно усложняющим (: безопасен в Unix), но он просто пытается предотвратить потенциальные проблемы (например, файл Unix отправляется по электронной почте или копируется на общий ресурс Windows), и на этом сервере вы ничего не можете сделать, чтобы этого избежать.