【问题标题】:PDF downloads surrounded by single quotes?PDF下载被单引号包围?
【发布时间】:2018-06-20 01:42:03
【问题描述】:

我在 Mozilla 或 Internet Explorer 中设置 PDF 下载时遇到问题,您可能从标题中了解到。如果我出于某种原因尝试下载 something.pdf,它会变成带有单引号的“something.pdf”,这当然会导致无法阅读,因为它不是有效的文件扩展名。我一直在寻找遇到同样问题的人,但遇到的情况很少,没有一个解决方案适合我。我很迷茫,并且一直试图弄清楚这个问题,所以我在这里。以下是发生下载的代码部分。 PHP 变量 $OrderNumber 只是一个五位数字,而 $FileNameToDownload 是指向 PDF 位置的整个目录(我已经检查过它没有单引号)。

header('Content-Description: File Transfer');
header('Content-Type: application/zip');
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename='$OrderNumber'");
header("Content-Transfer-Encoding: binary ");
header('Content-Length: ' . filesize($FileNameToDownload));
while(ob_get_level()) ob_end_clean();
flush();
readfile($FileNameToDownload);

唯一存在问题的浏览器是 Mozilla 和 IE。在 Chrome 和 Opera 中,它似乎工作得很好。任何帮助都将不胜感激,因为我已经被困了一段时间而没有前进。如果有另一种下载 PDF 的方法,我对它非常开放,但是除了这个方法之外,我发现和尝试的所有方法都在控制台中给我带来了安全错误,因为它试图从中提取 PDF。非常感谢,如果需要更多详细信息,我很乐意提供,但我尽量做到详尽。

【问题讨论】:

  • Mozilla 是一家生产多种不同产品的公司。该浏览器称为Firefox。您不会将 Chrome 称为“Google”、Edge 称为“Microsoft”或将 Safari 称为“Apple”,对吗?
  • 你是对的,如果这引起了混乱,我深表歉意。我觉得无论如何应该已经足够清楚了,但是为了避免将来发生这种情况,我会仔细检查我是否使用了适当的名称!感谢您的回复,感谢所有反馈。
  • ...然后去你的帖子里改正?下方有一个edit 按钮。

标签: php internet-explorer pdf firefox download


【解决方案1】:
header("Content-Disposition: attachment;filename='$OrderNumber'");

如果您不想在文件名中加上引号,请不要在文件名中加上引号。

Firefox 只是按照您的指示去做,而不是假设您犯了错误。

header("Content-Disposition: attachment;filename=$OrderNumber");

旁白:

    header('Content-Type: application/zip');
    header("Content-Type: application/force-download");
    header("Content-Type: application/download");

一个文档只能有一个 Content-Type。你为什么要设置三个?

无论如何,它们都不正确。您说您提供的是 PDF:

header('Content-Type: application/pdf');

【讨论】:

  • 问题解决了!我自己没有看到它感到很傻,但我非常感谢您的帮助。谢谢你,先生。关于内容类型,我们使用了各种文件扩展名,但主要是 PDF,这是我看到问题的唯一地方。我将修复代码,因为正如您所指出的,它在某些领域有点草率,它有点像“手把手的”,所以我在进行过程中正在弄清楚其中的一些。再次感谢您。
  • 您可以在此处使用双引号。显然你需要在双引号内转义它们:header("Content-Disposition: attachment;filename=\"$OrderNumber\"");
  • 我在文件名中有引号,它一直工作到今天突然/突然的 Chrome 开始下载包含引号的文件。我在 ASP.Net 上并提供 XLSX 文件。
【解决方案2】:

当我从 Google Chrome 中打开的页面保存文件时,它会自动在文件名周围加上单引号。例如,在 Microsoft Dynamics 中,当我生成列表然后导出到 Excel 时,无论如何都不会出现更改文件名的对话框屏幕,因此文件以名称“something.xlsx”保存在分配的下载文件夹中,因此单击它将向用户提出问题,他/她想用哪个应用程序打开它。 比如IE11就没有这个问题。

【讨论】:

  • 尝试指出问题的解决方案,或者写评论而不是回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 2019-01-13
相关资源
最近更新 更多