HTTP 内容类型响应中的字符集错误


Wrong charset in HTTP Content-Type response

我有一个运行apache 2.0的日本RHEL服务器。

这是我的问题:
我想要Content-Type: text/html; charset=UTF-8响应,但目前它回复Content-Type: text/html; charset=Shift_JIS

我尝试过:

  • AddDefaultCharset utf-8添加到工作.htaccess文件中(无法编辑 apache 配置文件)
  • <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />添加到 php 文件
  • php_value default_charset UTF-8添加到.htaccess文件
  • 用非常简单的test.php进行测试:

    <?php header('Content-Type: text/html; charset=UTF-8'); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <h1>Test</h1> </body> </html>

以上都不起作用。有人请帮助我。

名思义,AddDefaultCharset更改默认字符集。如果有另一个指令为您的文件类型设置了不同的内容类型,您的设置将被覆盖。

在这种情况下,如果您自己不这样做,PHP 本身将始终设置 Content-Type 标头,因此除非您将 PHP 作为 Apache 模块运行并使用 php_... Apache 指令,否则无法从 Apache 配置它。

有关详细信息,请查看 default_charset PHP 指令:

所有版本的 PHP 都将使用此值作为 PHP 发送的默认内容类型标头(如果未覆盖该标头) 通过调用 header()。

显然,您在响应正文中放入的任何内容(例如<meta>标记)都不会更改之前发送的响应标头

发现

问题与php.ini中的mbstring设置有关。当从更改时它起作用

mbstring.language = Japanese
mbstring.http_input = auto
mbstring.http_output = SJIS

mbstring.language = Japanese
mbstring.http_input = pass
mbstring.http_output = pass

但首先,检查阿尔瓦罗·冈萨雷斯对这个问题的回答。