【问题标题】:Symfony2 Remove UTF-8 BOM from controller responsesSymfony2 从控制器响应中删除 UTF-8 BOM
【发布时间】:2013-05-30 06:31:54
【问题描述】:

在创建“强制下载”操作时,我发现控制器生成的所有响应都包括 UTF-8 BOM ()。这与常规页面无关,但对于下载的文件是不可取的,因为 JPG 或 ZIP 被报告为在几个 Windows 查看软件中已损坏。因此,主要目标是从控制器输出中删除 BOM。

到目前为止,我已经这样做了:

1-使用 Win Grep 搜索我网站上每个文件的 BOM 块。零结果。

2-在同一个 web 服务器上创建一个非 symfony test.php 并检查客户端上的输出。那里没有 BOM。

有什么想法吗?

提前致谢, Z

更新:测试代码 1。生成的 JPG 包含 BOM。

public function downloadAction(Request $request){
    $filename= 'test.jpg';
    $response = new Response(file_get_contents($filename));
    $response->headers->set('Content-Type',mime_content_type($filename));        
    $response->headers->set('Content-Disposition', 'attachment; filename="' . basename($filename) . '"');
   return $response;

}

测试代码 2。生成的页面还包括 BOM。

public function downloadAction(Request $request){
echo 'hello world.';
exit; 

}

UPDATE2:我刚刚尝试过:从头开始创建一个全新的 symfony2 项目,使用相同的 IDE 添加一个测试控制器/动作,然后猜猜是什么:没有 BOM..所以,我的猜测是我的 symfony 站点内的某些东西正在拦截响应并添加 BOM 块。

【问题讨论】:

  • 你能告诉我们操作代码吗?
  • 更新了答案以包含两个测试代码。
  • 我昨天在这个答案中提供了几个解决方案建议(也就是查找 BOM 块、删除)。只是想回到那里检查......遗憾的是问题作者删除了问题......stackoverflow.com/questions/16719271/…
  • Errrr...对不起,nifr,那是我。决定删除该帖子,因为该问题不再反映实际问题。不确定这里的正确调用,我想我会把它链接回这里。问题依然存在。非常感谢您昨天的贡献。
  • 因为这似乎是一个非常简单的 hello-world 应用程序,您能否上传项目(或相关部分),以便我可以检查我的设置是否出现 BOM 问题(并在文件中搜索 BOM用我的工具)?我还可以测试这里是否包含 bom,以便 Xsendfile 和 X-Accel 解决问题。

标签: symfony httpresponse byte-order-mark


【解决方案1】:

PEAR 下的 LocalizeRoute.php 树枝扩展添加了著名的 UTF-8 BOM。在我的特殊情况下,Symfony 通过这个文件过滤所有响应,将 BOM 块添加到交付的每个页面。从 LocalizeRoute.php 中删除 BOM 足以解决问题。感谢 nifr 建议 BOM 搜索。使用免费窗口的工具 WinGrep 在整个服务器上运行二进制搜索。非常感谢。

【讨论】:

    猜你喜欢
    • 2021-12-21
    • 1970-01-01
    • 2017-12-27
    • 2015-10-23
    • 1970-01-01
    • 2012-02-08
    • 2012-09-12
    • 2012-05-04
    相关资源
    最近更新 更多