Nginx :UTF-8 字符集而不是 ISO-8859-1


Nginx : UTF-8 charset instead of ISO-8859-1

我想要我的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 来更改它,这是一种浪费(并且需要时间来设置)。

所以基本上,你有三种两种选择:

  1. 更改脚本以在 Content-type 标头中显式添加 charset=iso-8859-1 属性。

  2. php.ini 中更改您的default_charset选项。但是,这将更改nginx服务器运行的所有PHP脚本中的默认字符(即您最好知道自己在做什么)。

  3. 仅在 ISO-8859-1 服务器使用的 FPM 块中更改默认字符集。这可以通过将以下行添加到 FPM 配置块来实现:fastcgi_param PHP_ADMIN_VALUE "default_charset=iso-8859-1";

编辑:最后,选项 3 实际上会在 PHP-FPM 上设置default_charset,因为它们是为你的服务器安排的,并且该选项会坚持下去,所以它与 2 几乎相同,只是更不可预测。