8

Symfony 2 アプリケーションからのすべての応答には、次のヘッダー行があります。

Content-Type: text/html

したがって、私のブラウザは、出力文字セットが ISO-8859-1 であると想定しています。ヘッダーに次のように言いたい:

Content-Type: text/html; charset=utf8

代わりは。次のようなすべての応答に対して手動でこれを行うことができることを私は知っています:

$response->setCharset('UTF-8');

しかし、私のアプリケーションには多くのコントロールがあり、UTF-8 しか出力しないため、これは非常に冗長です。デフォルトの文字セットを制御する Symfony 構成設定を探しても無駄でした。私は見つけましframework.charsetたが、それは無関係のようで、とにかくデフォルトでUTF-8です。

すべての応答で Symfony に私の文字セットを指定させるにはどうすればよいですか?


私の考え

HTML と XML の両方で文字セットを明示的に指定できるので、(ほとんどの場合) これがそれほど問題にならないことはわかっています。問題は、プレーン テキストまたは JSON を使用している場合、または を使用して変数をダンプしている場合ですvar_dump。どちらの場合も、ブラウザーが誤った推測を行うため、すべての非 ASCII 記号がスクランブルされます。

私のバックアップソリューションは、応答クラスをサブクラス化$this->setCharset('UTF-8')し、コンストラクターに入れることです。

4

4 に答える 4

3

setCharset() を使用しても、 headers に charset は設定されません

ヘッダーで utf-8 エンコーディングを指定する場合は、 $app->run() の前のどこかで次のコードを使用できます

$app->after(
    function (Request $request, Response $response) {
        $response->headers->set(
            'Content-Type', 
            $response->headers->get('Content-Type') . '; charset=UTF-8'
        );

        return $response;
    }
);

さらに、json 出力をエスケープされていない utf8 文字で表示したい場合は、次のようなものを使用できます。

$app->after(
    function (Request $request, Response $response) {
        $response->headers->set('Content-Type', $response->headers->get('Content-Type') . '; charset=UTF-8');

        if ($response instanceof JsonResponse) {
            $response->setEncodingOptions(JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
        }

        return $response;
    }
);

プリティプリントも設定します:)

于 2016-10-26T15:58:41.823 に答える
0

他に何も役に立たない場合は、引き続き使用します$response->setCharset('UTF-8');が、カーネル応答リスナーに入れます。これは Symfony の一般的なパターンです。多くのコントローラーで (ほぼ) 同じことを行うたびに、コントローラーのコードをポイントにまっすぐに保つために、代わりにカーネル応答リスナーに移動する必要があります。

于 2016-10-01T14:12:03.850 に答える
0

Symfony 3.1 では、AppKernel で getCharset() をオーバーライドするだけです。http://symfony.com/doc/current/reference/configuration/kernel.html

// app/AppKernel.php

// ...
class AppKernel extends Kernel
{
    public function getCharset()
    {
        return 'ISO-8859-1';
    }
}
于 2016-11-02T09:42:18.230 に答える
-1

config.yml で使用する文字セットをフレームワークに伝えることができると思います。

framework:
  charset:         UTF-8

参照: http://symfony.com/doc/current/reference/configuration/framework.html

于 2013-05-14T01:15:52.263 に答える