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..

如果字符集已经在 Content-Type header 中由 PHP 定义,Nginx 默认行为是不接触字符集。要更改此行为,您必须将 override_charset 指令设置为 "on".

我假设你没有尝试过这个,但你应该将 php.ini 中的 default_charset 设置为你想要的字符集,而不是用 Nginx 转换它。

检查您的 PHP 脚本是否 而不是 显式输出 charset 属性。如果不是,那么我猜 Ubuntu 中的默认 PHP 配置( Debian 中的默认配置)是添加 UTF-8 字符集,并且从现在你只能通过设置转换 table 再次从 UTF-8 返回到 ISO-8859-1 来在 nginx 中更改它,这是一种浪费(并且需要时间来设置)。

所以基本上,你有三个两个选项:

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

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

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

编辑:最后,选项 3 实际上会在 PHP-FPM 上设置 default_charset,因为它们是为您的服务器安排的,并且该选项将保留,因此它与 2 几乎相同,只是更加不可预测table。