0

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

fopen:( Unable to find the file or directory )  

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

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

4

3 回答 3

2

你可以urlencode

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

但是你会得到奇怪的字符。

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

 file_put_contents(preg_replace('/[^A-Za-z0-9_\-]/', '','asd#$%21234 /&11 /!@##$$%&&*()_'), 'test');
于 2012-10-05T10:38:14.257 回答
1

OWASP ESAPI4PHP库为文件名和其他类型的数据提供了一些非常不错的消毒剂。

另请参阅文件名限制比较

于 2012-10-05T10:50:27.310 回答
1

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

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

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

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

于 2012-10-05T10:31:20.957 回答