0

「強制ダウンロード」アクションを作成しているときに、コントローラーによって生成されたすべての応答に UTF-8 BOM (»¿) が含まれていることがわかりました。これは通常のページには関係ありませんが、いくつかの Windows 表示ソフトウェアで JPG または ZIP が破損していると報告されているため、ダウンロードされたファイルには望ましくありません。したがって、主な目標は、コントローラーの出力から 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; 

}

更新 2: 私はちょうどこれを試みた: ゼロから真新しい symfony2 プロジェクトを作成し、同じ IDE を使用してテスト コントローラー/アクションを追加し、何を推測します: BOM はありません..だから、私の推測では、symfony サイト内の何かが応答をインターセプトしていると思います。 BOM チャンクを追加します。

4

1 に答える 1

0

有名な UTF-8 BOM は、PEAR の LocalizeRoute.php twig 拡張によって追加されました。私の特定のケースでは、Symfony がこのファイルを介してすべての応答をフィルタリングし、配信されたすべてのページに BOM チャンクを追加します。問題を解決するには、LocalizeRoute.php から BOM を削除するだけで十分でした。BOM 検索を提案してくれた nifr の功績。フリー ウィンドウのツール WinGrep を使用して、サーバー全体でバイナリ検索を実行しました。どうもありがとう。

于 2013-05-29T22:31:54.750 に答える