我在 apache 网络服务器上有一个 PHP 网站。该网站已经工作多年。
几周前我不得不重新安装那台机器,所以我做了并检查了所有备份,重新安装了操作系统(Gentoo)并在新机器上使用相同版本的 apache 和 php 恢复了网站。
我快速检查了页面是否已加载,仅此而已,一切似乎都很好。
今天我不得不重新开始使用该站点,当我在浏览器中检查输出代码时,我发现了这个:
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
问题是,Apache 设置为以 utf-8 发送内容,php 的默认字符集为 utf-8,文件都保存为 utf-8,PHP 代码生成一个 Content-Type 为 utf-8。us-ascii 值从何而来?
在生成代码的 PHP 中,一切正常
ob_start();
// check the output
var_dump( $tmp );exit( __FILE__.' '.__LINE__ );
// send the clean HTML document or the raw XML if something went wrong
if ( $tmp['final_document'] !== false ) {
echo( $tmp['final_document'] );
} else {
echo( $tmp['xml_content'] );
}
ob_end_flush();
上面的 var_dump 输出具有正确 Content-type 的 XHTML 源代码
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
但是如果我正常发送页面,编码是ascii。
据我所知,我一直在做的唯一更改是设置 mod_security,仅此而已。
我应该检查什么?哪些文件?什么配置?
笔记:
我只包含 Apache 标记,因为我认为问题与此有关,var_dump 表明 PHP 正在正确生成代码。如果问题有所不同,我会相应地调整标签。
我更新了我的标签以反映情况和解决方案。
更新 - 解决方案:
按照建议,我从这部分中删除了解决方案并将其添加为答案。