文件名中的特殊符号在 mPDF 中显示不正确

special symbols in filename doesn't display correct in mPDF

我有代码:

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

但是当我以文件名而不是符号 <>?: 保存文档时显示 -----。 可以修复吗?

首先,这个问题与生成PDF无关。您想要创建一个文件系统对象,其名称包含在某些 shell 中具有特殊含义的字符:

  • < 是输入重定向运算符
  • >是输出重定向运算符
  • ?任意字符通配符
  • :是Windows盘符分隔符

并且您想通过您无法控制的附加层来完成它(我假设是网络浏览器)。

一些文件系统(不是全部)将对象名称视为原始字节字符串并且不强加任何条件。我记得在我读过一本解释这种事情是可能的书之后,我能够在一个包含 * 字符和换行符的旧 Unix 盒子中创建文件。然而,一个文件名要经过几个软件层,其中许多实际上需要理解这个名字,其中一些可能会对文件系统本身施加额外的限制。因此,即使您设法创建了该文件,您以后也可能无法读回它。

因此,浏览器会主动删除有问题的字符。在某些情况下,它可能过于热心(: 在 Unix 上是安全的)但它只是试图防止潜在的问题(例如 Unix 文件通过电子邮件发送或复制到 Windows 共享)并且您无能为力在服务器上做以避免这种情况。