我正在使用FPDF在我的网站上生成PDF并通过电子邮件发送给用户。但生成的PDF名称包含斜杠和加号(+,/,\,[,])等,因此会发生以下错误:
fopen:( Unable to find the file or directory )
一旦删除斜杠和大括号,PDF就会成功生成并通过电子邮件发送。
需要一个处理文件名的解决方案吗? 文件名是动态创建的,所以我不能更改它们吗?所以我想我需要首先从PDF文件名中删除所有这些特殊字符,然后将其发送到FPDF输出。但是怎么做呢?
答案 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库为文件名和其他类型数据提供了一些非常不错的清理程序。