【问题标题】:PHP UTF-8 ConfigurationPHP UTF-8 配置
【发布时间】:2011-08-28 16:27:00
【问题描述】:

我正在使用 PHP 5.3.5 配置我的 Apache/2.2.17 服务器。我的目标是创建一个干净的配置,默认为内容类型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 字符串
默认情况下,PHP 始终在 Content-type: 标头中输出字符编码。要禁用字符集的发送,只需将其设置为空即可。

我已将default_mimetype 字段更改为text/html,突然间,它似乎工作了:Content-Type:text/html; charset=UTF-8
default_mimetype 设置回application/xhtml+xml 将不会发送charset=UTF-8。这是没有任何 Apache 配置的。

是 PHP 坏了,还是我错过了什么?

【问题讨论】:

  • 我可能会建议在您的应用程序中手动设置编码,即使您讨厌它;) 使您的应用程序更便携。
  • Content-Encoding 没有指定内容的字符编码,而是指定了 additional content encoding 已应用于 gzip 等实体主体>放气.
  • @Gumbo 感谢您的指点。我不小心混合了 character-encodingcontent-encoding。我已经更新了问题。

标签: php configuration character-encoding


【解决方案1】:

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

AddDefaultCharset utf-8
DefaultType application/xml

【讨论】:

    【解决方案2】:

    PHP 不这样做...但是,您可以使用 Apache 来执行此操作。

    假设以上,你可以使用

    AddDefaultCharset utf-8
    DefaultType application/xhtml+xml
    

    这应该出现在您的 VirtualHost(或服务器配置)中

    【讨论】:

      【解决方案3】:

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

      output_handler = ob_iconv_handler
      

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

      但是,你应该设置default_mimetype,否则它会设置Content-Type:;charset=字符编码

      【讨论】:

        【解决方案4】:

        请注意,如果您将 mimetype 设置为“application/xhtml+xml”,旧版本的 Internet Explorer 将不会呈现页面,而是显示保存对话框。

        要解决这个问题,您可以将 mimetype 设置为“text/html”,但这在 XHTML 1.1 中无效

        您也可以使用内容协商来解决问题。

        在此处阅读更多信息:http://www.webstandards.org/learn/articles/askw3c/sep2003/

        如果可以选择,我将使用“text/html”运行并使用 HTML5 文档类型<!DOCTYPE html>。这样,您仍然可以使用 XHTML 语法并成为有效的 HTML5(虽然在技术上当然不是有效的 XHTML...)

        【讨论】:

        • 幸运的是 Internet Explorer 6 是我的最低要求,而您的消息来源说它无法识别到 6。所以我很安全。感谢您指出。
        • 是的,我也看到了,但我很确定我自己也遇到过这个问题,而且我(在现代)从来没有在比 IE6 更早的版本中测试过,所以我不会完全相信这在 IE678 中不是问题...
        • 它说“至少达到 IE 6.x”,并隐含包含 IE6(请参阅帖子后面的表格)。另外,这个帖子是 2003 年的,所以这在以后的版本中也可能是一个问题......
        • 然而:在 IE6 中不使用 HTML5。那么如何才能在 IE6 中成为有效的 XHTML?
        • 您仍然可以在 IE6 中使用 HTML5 文档类型。它会在所有浏览器中自动触发标准模式:)
        猜你喜欢
        • 1970-01-01
        • 2012-03-11
        • 1970-01-01
        • 1970-01-01
        • 2011-12-09
        • 2019-07-28
        • 2021-01-30
        • 2011-05-03
        • 2011-11-30
        相关资源
        最近更新 更多