我的内容类型中的charset = us-ascii

时间:2013-08-04 06:54:53

标签: php htmltidy

我在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代码生成内容类型为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正在生成代码。如果问题不同,我会相应地调整标签。

我更新了我的代码以反映情况和解决方案。

更新 - 解决方案:

根据建议,我从此部分中删除了解决方案,并将其添加为答案。

1 个答案:

答案 0 :(得分:0)

问题是由网站中的一个配置行造成的,在配置部分,我有这个:

ini_set( 'tidy.clean_output', true );

但这次我没有安装整洁,因为我决定,不久前停止使用它并做自己的美化。在备份/恢复过程之前,我停止使用整洁,但它仍然安装在我的系统上,我显然忘记删除该配置行,因此该网站仍在使用它,至少使用了自我的个人配置以来的所有默认值整理被删除;它是在一个单独的文件中。

这个错误告诉我,当你使用整洁时,至少使用默认值,最终输出从PHP解析器变为整齐,从那里到Apache,再从那里到用户。我在内部流程的一个非常具体的部分使用整洁,所以我不知道/记住PHP默认情况下如何/何时向其发送信息。虽然因为我使用输出缓冲而在最后发送是有道理的。

我们可以在HTML Tidy Configuration Options中看到默认字符集是ascii。