Php 如何让Laravel在所有响应中指定我的字符集?

Php 如何让Laravel在所有响应中指定我的字符集?,php,laravel,character-encoding,laravel-5,Php,Laravel,Character Encoding,Laravel 5,是的,我知道我应该使用UTF-8,但我需要使用windows-1252字符集编码 我知道我可以通过硬编码基本Synfony响应类来实现 Response.php $charset=$this->charset?:'windows-1252' 但那太难看了 我找不到从配置文件中设置它的位置。有什么帮助吗?您可以在中间件中更改字符集: <?php namespace App\Http\Middleware; use Closure; class SetCharset { publi

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

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

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

但那太难看了


我找不到从配置文件中设置它的位置。有什么帮助吗?

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

<?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;
    }
}
仅当内容类型为
text/html
时才更改字符集的改进


它不起作用了。。。可能中间件在设置了头之后正在更改字符集?您是否在Kernel.php中启用了中间件?你能确保它是通过在handle方法中执行dd('test')来运行的吗?是的,我做了,实际上我可以看到字符集成功更改:#字符集:“windows-1252”问题是变量“charset”成功更改。但是类响应使用这个变量来设置标题“Content Type”,但是标题仍然是“text/html;charset=UTF-8”。如果我在Response类中硬编码该变量,那么它会成功地将标题设置为“text/html;charset=windows-1252”。看起来中间件设置字符集太晚了,也许?这将覆盖所有强制“text/html”的响应内容类型。如果要输出json响应,需要“application/json”,该怎么办?