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 中更改它,这是一种浪费(并且需要时间来设置)。
所以基本上,你有三个两个选项:
更改脚本以在 Content-type
header 中显式添加 charset=iso-8859-1
属性。
更改 php.ini
中的 default_charset
选项。但是,这将更改 all PHP 脚本 运行 中的默认字符(即您最好知道自己在做什么)。 =17=]
仅更改 ISO-8859-1 服务器使用的 FPM 块中的默认字符集。这可以通过将以下行添加到 FPM 配置块来完成:fastcgi_param PHP_ADMIN_VALUE "default_charset=iso-8859-1";
编辑:最后,选项 3 实际上会在 PHP-FPM 上设置 default_charset
,因为它们是为您的服务器安排的,并且该选项将保留,因此它与 2 几乎相同,只是更加不可预测table。
我想要我的 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 中更改它,这是一种浪费(并且需要时间来设置)。
所以基本上,你有三个两个选项:
更改脚本以在
Content-type
header 中显式添加charset=iso-8859-1
属性。更改
php.ini
中的default_charset
选项。但是,这将更改 all PHP 脚本 运行 中的默认字符(即您最好知道自己在做什么)。 =17=]仅更改 ISO-8859-1 服务器使用的 FPM 块中的默认字符集。这可以通过将以下行添加到 FPM 配置块来完成:fastcgi_param PHP_ADMIN_VALUE "default_charset=iso-8859-1";
编辑:最后,选项 3 实际上会在 PHP-FPM 上设置 default_charset
,因为它们是为您的服务器安排的,并且该选项将保留,因此它与 2 几乎相同,只是更加不可预测table。