Symfony2从控制器响应中删除UTF-8 BOM

时间:2013-05-24 14:12:31

标签: symfony httpresponse byte-order-mark

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

到现在为止我已经这样做了:

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

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

有什么想法吗?

提前致谢, ž

更新:测试代码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块。

1 个答案:

答案 0 :(得分:0)

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