Apache 2.4 + XSendfile 将 charset=utf-8 附加到 content-type header
Apache 2.4 + XSendfile appends charset=utf-8 to content-type header
我们刚刚将我们的一个 Web 应用程序(经典 lamp 堆栈)从 Ubuntu 14/Apache 2.2/PHP 5.5 迁移到 Ubuntu 16/Apache 2.4/ PHP 7.0。一切都很顺利。目前只有一个部分让我头疼:
我们应用程序中的一个路由检查传入的文件请求并通过 XSendfile(第三方内容)传送该文件。用于文件传送的 content-type 由应用程序显式设置。这意味着,例如,我们为 *.html
文件附加 text/html
的 content-type。这工作非常顺利,浏览器收到了准确的内容类型。
现在,在新机器上(同样的代码,同样的文件传递),浏览器收到的content-type是text/html;charset=utf-8
。 content-type.
后附加了一些字符集元数据
这对我们来说很糟糕,因为有些文件包含 iso-8859-1
编码的内容。结果是显示的 html 文件中的编码错误。
我已经对所有内容进行了三重检查。我们在 HTTP header 中放置的 content-type 明确设置 没有 utf-8 字符集元数据。
现在我正在检查各种 Apache2/XSendfile 特定配置以获取有关该行为的任何提示。
有没有其他人在使用 XSendfile 的 Apache 2.4 上经历过类似的行为? Apache 发送的 content-type 比 html 元标记中的重要度更高,对吗?如何禁用 content-type header 中的字符集元信息的自动附加?
我 运行 遇到了这个完全相同的问题,导致 Android 应用程序发生严重破坏,期望 text/html
MIME 逐字记录,发现它实际上是 PHP 配置更改在更新中。在 PHP 5.6 中,他们将默认 default_charset
设置从 ""
更改为 "UTF-8"
。
您可以在适当的 php.ini
中更改此设置,或者只需在 header()
调用之前添加猴子补丁 ini_set('default_charset', NULL);
。
default_charset string
In PHP 5.6 onwards, "UTF-8" is the default value and its value is used as the default character encoding for htmlentities(), html_entity_decode() and htmlspecialchars() if the encoding parameter is omitted...
All versions of PHP will use this value as the charset within the default Content-Type header sent by PHP if the header isn't overridden by a call to header().
参考:http://php.net/manual/en/ini.core.php#ini.default-charset
我们刚刚将我们的一个 Web 应用程序(经典 lamp 堆栈)从 Ubuntu 14/Apache 2.2/PHP 5.5 迁移到 Ubuntu 16/Apache 2.4/ PHP 7.0。一切都很顺利。目前只有一个部分让我头疼:
我们应用程序中的一个路由检查传入的文件请求并通过 XSendfile(第三方内容)传送该文件。用于文件传送的 content-type 由应用程序显式设置。这意味着,例如,我们为 *.html
文件附加 text/html
的 content-type。这工作非常顺利,浏览器收到了准确的内容类型。
现在,在新机器上(同样的代码,同样的文件传递),浏览器收到的content-type是text/html;charset=utf-8
。 content-type.
这对我们来说很糟糕,因为有些文件包含 iso-8859-1
编码的内容。结果是显示的 html 文件中的编码错误。
我已经对所有内容进行了三重检查。我们在 HTTP header 中放置的 content-type 明确设置 没有 utf-8 字符集元数据。
现在我正在检查各种 Apache2/XSendfile 特定配置以获取有关该行为的任何提示。
有没有其他人在使用 XSendfile 的 Apache 2.4 上经历过类似的行为? Apache 发送的 content-type 比 html 元标记中的重要度更高,对吗?如何禁用 content-type header 中的字符集元信息的自动附加?
我 运行 遇到了这个完全相同的问题,导致 Android 应用程序发生严重破坏,期望 text/html
MIME 逐字记录,发现它实际上是 PHP 配置更改在更新中。在 PHP 5.6 中,他们将默认 default_charset
设置从 ""
更改为 "UTF-8"
。
您可以在适当的 php.ini
中更改此设置,或者只需在 header()
调用之前添加猴子补丁 ini_set('default_charset', NULL);
。
default_charset string
In PHP 5.6 onwards, "UTF-8" is the default value and its value is used as the default character encoding for htmlentities(), html_entity_decode() and htmlspecialchars() if the encoding parameter is omitted...
All versions of PHP will use this value as the charset within the default Content-Type header sent by PHP if the header isn't overridden by a call to header().
参考:http://php.net/manual/en/ini.core.php#ini.default-charset