我想要我的Nginx输出ISO-8859-1而不是UTF-8:
#curl -I www.xyz.com
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 26 Feb 2016 15:36:47 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.3.10-1ubuntu3.21
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
我在我的会议中有这个:
server {
...
charset iso-8859-1;
...
}
我试着把它放在我的etc/nginx/nginx.conf中,在我的etc/nginx/site-enabled/app.conf中,几乎在每个地方我都能做到,但没有运气......
这是我的语言环境:
#locale
LANG=fr_FR.UTF-8
LANGUAGE=
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=
我不知道下一步该怎么做...
注意:我在一个 docker 容器上工作,以复制运行 PHP5.3 的旧服务器,因为我需要REGISTER_GLOBAL。
如果 PHP 已经在 Content-Type 标头中定义了字符集,则 Nginx 的默认行为是不接触字符集。要更改此行为,您必须将override_charset指令设置为"on"。
我假设你没有尝试过这个,但你应该在你的 php.ini 中设置default_charset到你想要的字符集,而不是用 Nginx 转换它。
检查您的 PHP 脚本是否没有显式输出 charset
属性。如果没有,那么我猜 Ubuntu 中的默认 PHP 配置(它是 Debian 中的默认设置)是添加 UTF-8 字符集,从现在开始你只能在 nginx 中通过设置转换表再次从 UTF-8 返回到 ISO-8859-1 来更改它,这是一种浪费(并且需要时间来设置)。
所以基本上,你有三种两种选择:
-
更改脚本以在
Content-type
标头中显式添加charset=iso-8859-1
属性。 -
在
php.ini
中更改您的default_charset
选项。但是,这将更改nginx服务器运行的所有PHP脚本中的默认字符(即您最好知道自己在做什么)。 -
仅在 ISO-8859-1 服务器使用的 FPM 块中更改默认字符集。这可以通过将以下行添加到 FPM 配置块来实现:fastcgi_param PHP_ADMIN_VALUE "default_charset=iso-8859-1";
编辑:最后,选项 3 实际上会在 PHP-FPM 上设置default_charset
,因为它们是为你的服务器安排的,并且该选项会坚持下去,所以它与 2 几乎相同,只是更不可预测。