在我的网站上在线生成PDF时,在FPDF中命名PDF文件

时间:2012-10-05 10:28:18

标签: php filenames fpdf

我正在使用FPDF在我的网站上生成PDF并通过电子邮件发送给用户。但生成的PDF名称包含斜杠和加号(+,/,\,[,])等,因此会发生以下错误:

fopen:( Unable to find the file or directory )  

一旦删除斜杠和大括号,PDF就会成功生成并通过电子邮件发送。

需要一个处理文件名的解决方案吗? 文件名是动态创建的,所以我不能更改它们吗?所以我想我需要首先从PDF文件名中删除所有这些特殊字符,然后将其发送到FPDF输出。但是怎么做呢?

3 个答案:

答案 0 :(得分:2)

您可以urlencode

 file_put_contents(urlencode('asd#$%21234 /&11 /!@##$$%&&*()_'), 'test');

但是你会变得很奇怪。

或者你可以剥离并留下允许的字符

 file_put_contents(preg_replace('/[^A-Za-z0-9_\-]/', '','asd#$%21234 /&11 /!@##$$%&&*()_'), 'test');

答案 1 :(得分:1)

我认为不能在文件名中使用斜杠,因为它也用于确定文件路径。例如,文件nammed foo / bar.php实际上是一个名为bar.php但在foo文件夹中的文件。

解决方法可能是首先创建foo目录。然后当你要求“foo / bar.php”文件时,你将从foo目录中获取bar.php文件(未经测试)。

或者您可以删除所有不需要的字符。对于我的项目,我使用它来“标准化”文本:

$ string = preg_replace('#[^ a-z0-9] +#',' - ',$ string);

答案 2 :(得分:1)

OWASP ESAPI4PHP库为文件名和其他类型数据提供了一些非常不错的清理程序。

另请参阅 comparison of filename limitations