PHP UTF-8 配置

4

我正在配置我的Apache/2.2.17服务器,使用PHP 5.3.5。我的目标是创建一个干净的配置,将内容类型默认设置为UTF-8

php.ini

default_charset = "UTF-8"
default_mimetype = "application/xhtml+xml"

我收到:

Content-Type: application/xhtml+xml

但需要:

Content-Type: application/xhtml+xml; charset=UTF-8

所有 Apache 配置(AddDefaultCharset UTF-8)的解决方案似乎都不起作用,而且我在编辑了 php.ini 配置后已经重新启动了 Apache。
PHP 文档:

default_charset string
PHP 总是默认在 Content-type: 头中输出字符编码。要禁用发送字符集,请将其设置为空。

我已将 default_mimetype 字段更改为 text/html,突然间它似乎起作用了:Content-Type:text/html; charset=UTF-8
default_mimetype 设置回 application/xhtml+xml 将不会发送 charset=UTF-8。这是没有任何Apache 配置的情况下。
PHP 是否有问题,还是我遗漏了什么?

1
我可能会建议您手动设置应用程序中的编码,尽管您可能不喜欢它 ;) 这将使您的应用程序更具可移植性。 - Markus Hedlund
2
Content-Encoding 不指定内容的字符编码,而是指已应用于实体主体的附加内容编码,例如 gzipdeflate - Gumbo
@Gumbo 感谢你的指点。我不小心混淆了“字符编码”和“内容编码”。我已经更新了问题。 - Pindatjuh
4个回答

4

我认为你需要在apache配置中设置这些参数,而不是PHP。编辑apache2.conf或.htaccess文件以适用于您的项目:

AddDefaultCharset utf-8
DefaultType application/xml

1

PHP不能做到这一点... 但是,您可以使用Apache来实现。

假设以上情况,您可以使用

AddDefaultCharset utf-8
DefaultType application/xhtml+xml

这段代码应该出现在你的VirtualHost(或服务器配置)中


0

我已启用了iconv模块并添加到php.ini

output_handler = ob_iconv_handler

此处理程序将正确的字符编码添加到输出的 Content-Type,而不是使用 default_charset

但是,您应该设置 default_mimetype,否则它会将 Content-Type:;charset=character-encoding 放入其中。


-1

请注意,如果你将MIME类型设置为“application/xhtml+xml”,旧版本的Internet Explorer将无法渲染页面,而是显示保存对话框。

为了解决这个问题,你可以将MIME类型设置为“text/html”,但这在XHTML 1.1中是无效的。

你也可以使用内容协商来解决这个问题。

在这里阅读更多:http://www.webstandards.org/learn/articles/askw3c/sep2003/

如果可以的话,我建议使用“text/html”并使用HTML5 doctype <!DOCTYPE html>。这样,你仍然可以使用XHTML语法,并且是有效的HTML5(尽管不是严格有效的XHTML...)


幸运的是,我的最低要求是Internet Explorer 6,而您的源代码显示它不被识别到6。所以我很安全。感谢您指出。 - Pindatjuh
是的,我也看到了,但我相当确定我自己遇到过这个问题,而且我从未在任何比IE6旧的浏览器中进行过测试(现代时代),因此我一点也不自信这在IE678中不是一个问题... - Adrian Schmidt
它说“至少支持IE 6.x”,隐含包括IE6(请查看帖子后面的表格)。此外,这篇文章是2003年发布的,所以在以后的版本中可能也会出现这个问题... - Adrian Schmidt
你仍然可以在IE6中使用HTML5 doctype。它将自动触发所有浏览器的标准模式 :) - Adrian Schmidt
当然可以,但那不会是XHTML,对吧? - Pindatjuh
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接