【问题标题】:Nginx : UTF-8 charset instead of ISO-8859-1Nginx:UTF-8 字符集而不是 ISO-8859-1
【发布时间】:2016-02-26 15:57:18
【问题描述】:

我想要我的 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

我的 conf 中有这个:

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 nginx character-encoding php-5.3 iso-8859-1


    【解决方案1】:

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

    我假设您还没有尝试过,但您应该将 php.ini 中的 default_charset 设置为您想要的字符集,而不是使用 Nginx 进行转换。

    【讨论】:

    • 天哪,感谢您指出这一点。我从另一个容器构建了我的 docker 容器,该容器也来自另一个容器......它在 /etc/php5/fpm/conf.d 中有一个 custom.ini,default_charset =“UTF-8”......跨度>
    【解决方案2】:

    检查您的 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 服务器运行的 all PHP 脚本中的默认字符(即,您最好知道自己在做什么)。

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

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

    【讨论】:

    • 实际上,第三个选项非常可行,因为它允许从 docker 容器将编码设置为单个网站服务器。它给编辑php.ini 增加了一层不便,但对我来说效果很好,因为我必须为 nginx 编写自定义配置,并且在fastcgi_params 中添加另一个参数一点也不难。只是为了多解释一下我的情况,我有一个用windows-1251 编码的旧站点,并且必须将其作为utf-8 提供服务。现在默认情况下,nginx 和 php 都认为它们服务于 utf-8。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-09-29
    • 2013-01-19
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    相关资源
    最近更新 更多