gpt4 book ai didi

php - 我如何让 Symfony 在所有响应中指定我的字符集?

转载 作者:可可西里 更新时间:2023-11-01 13:01:21 26 4
gpt4 key购买 nike

我的 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') 放入构造函数中。

最佳答案

使用 setCharset() 不会在标题中设置字符集

如果你想在headers中指定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;
}
);

它也设置 pretty-print :)

关于php - 我如何让 Symfony 在所有响应中指定我的字符集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16533472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com