0

在创建“强制下载”操作时,我发现控制器生成的所有响应都包括 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 块。

4

1 回答 1

0

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

于 2013-05-29T22:31:54.750 回答