Apache 2.4+;XSendfile将charset=utf-8追加到内容类型头中

Apache 2.4+;XSendfile将charset=utf-8追加到内容类型头中,apache,utf-8,character-encoding,iso-8859-1,x-sendfile,Apache,Utf 8,Character Encoding,Iso 8859 1,X Sendfile,我们刚刚将一个web应用程序(经典lamp堆栈)从Ubuntu 14/Apache 2.2/PHP5.5迁移到Ubuntu 16/Apache 2.4/PHP7.0。一切都很顺利。目前只有一个部分让我头疼: 我们应用程序中的一个路由检查传入的文件请求,并通过XSendfile(第三方内容)传递该文件。文件传递的内容类型由应用程序显式设置。这意味着,例如,我们为*.html文件附加了text/html的内容类型。这项工作非常顺利,浏览器接收到的内容类型完全相同 现在,在新机器上(要交付的代码和文件

我们刚刚将一个web应用程序(经典lamp堆栈)从Ubuntu 14/Apache 2.2/PHP5.5迁移到Ubuntu 16/Apache 2.4/PHP7.0。一切都很顺利。目前只有一个部分让我头疼:

我们应用程序中的一个路由检查传入的文件请求,并通过XSendfile(第三方内容)传递该文件。文件传递的内容类型由应用程序显式设置。这意味着,例如,我们为
*.html
文件附加了
text/html
的内容类型。这项工作非常顺利,浏览器接收到的内容类型完全相同

现在,在新机器上(要交付的代码和文件相同),浏览器接收的内容类型是
text/html;字符集=utf-8
。有一些字符集元数据附加到内容类型

这对我们来说非常糟糕,因为有些文件包含
iso-8859-1
编码内容。结果是显示的html文件中存在编码错误

我把所有的东西都检查了三遍。我们在HTTP头中放置的内容类型是显式设置的,没有utf-8字符集元数据

现在,我正在检查各种Apache2/XSendfile特定配置,以获取有关该行为的任何提示


有没有其他人在使用XSendfile的Apache2.4上经历过类似的行为?Apache发送的内容类型比html元标记中的内容类型具有更高的重要性,这是对的吗?如何在内容类型标题中禁用字符集元信息的自动附加?

我遇到了完全相同的问题,导致Android应用程序上的havok需要
文本/html
MIME逐字复制,并发现它实际上是在更新中更改的PHP配置。在PHP5.6中,他们将默认的
default\u字符集设置从
更改为
“UTF-8”

您可以在相应的
php.ini
中对此进行更改,或者只需添加一个monkey补丁
ini\u集('default\u charset',NULL)头()调用之前执行code>

默认字符集字符串

在PHP5.6以后的版本中,“UTF-8”是默认值,如果省略了编码参数,它的值将用作HtmlEntity()、html_entity_decode()和htmlspecialchars()的默认字符编码

所有版本的PHP都将使用此值作为PHP发送的默认内容类型标头中的字符集,前提是该标头未被对header()的调用覆盖

参考: