如何让Laravel在所有回复中指定我的字符集?

时间:2015-07-23 10:30:44

标签: php laravel character-encoding laravel-5

是的,我知道我应该使用UTF-8,但我需要使用windows-1252字符集编码。

我知道我可以通过对基本的Synfony响应类进行硬编码来实现 Response.php,

$charset = $this->charset ?: 'windows-1252';

但这很难看。

我无法从配置文件中找到设置位置。有什么帮助吗?

2 个答案:

答案 0 :(得分:3)

您可以在中间件中更改字符集:

<?php namespace App\Http\Middleware;

use Closure;

class SetCharset
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);
        $response->header('Content-Type', 'text/html; charset=windows-1252');

        return $response;
    }
}

请确保您返回的所有内容都采用正确的编码方式。

答案 1 :(得分:0)

仅当内容类型为text/html时,改进answer by @jedrzej.kurylo才能更改字符集。

<?php 

namespace App\Http\Middleware;

use Closure;

class SetCharset
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        $contentType = $response->headers->get('Content-Type');
        if (strpos($contentType, 'text/html') !== false) {
            $response->header('Content-Type', 'text/html; charset=windows-1252');
        }

        return $response;
    }
}

放入SetCharset.php app/Http/Middleware文件夹,然后修改app/Http/Kernel.php并将类引用添加到$middleware数组属性的末尾:

protected $middleware = [
    // ... Other middleware references
    \App\Http\Middleware\SetMiddleware::class,
];