【问题标题】:PHP 5.6 update makes UTF-8 not workPHP 5.6 更新使 UTF-8 不起作用
【发布时间】:2015-08-04 10:28:04
【问题描述】:

我最近将我的 PHP-Webspace 更新到 5.6(从 5.5 开始)并且发生了一些奇怪的事情。尽管我使用元标记 <meta charset="utf-8"> 并在我的 .htaccess 文件 AddDefaultCharset utf-8 中使用以下行,但我的网站突然错误地显示 UTF-8 字符。

在我的 PHP 脚本中插入以下行后,一切都恢复正常了 header('Content-Type: charset=utf-8');

这都发生在我的网站空间(我无法访问 php.ini 文件)和我的本地服务器上。由于我也在使用其他 PHP 脚本,所以我不想在所有配置文件中插入 header('Content-Type: charset=utf-8');...

可能是什么原因?

【问题讨论】:

  • 只是Content-Type: charset=utf-8 无效,我不知道浏览器会如何解释它。也许您实际上覆盖了正确的 UTF-8 标头,因此浏览器现在将您的网站解释为 UTF-8。如果它在您的网站被解释为 UTF-8 时有效,则意味着您的网站实际上不是 UTF-8 编码的。首先通过在浏览器中的 View → Encoding 中显式选择一种编码来进行测试。
  • @deceze 你可能误解了我的意思。仅当我执行 Content-Type: charset=utf-8 时才有效。
  • 所以我告诉你,这可能意味着你的网站实际上并没有被解释为 UTF-8,因为这是一个无效的 Content-Type 标头。这可能意味着您的网站实际上不是 UTF-8 编码的。这会指出一些非常深层次的问题。
  • @deceze 我明白你的意思。但就像我解释的那样,在我从 PHP 5.5 升级到 5.6 之前,这一切都有效。为了让它再次工作,我在 PHP 中添加了标头(顺便说一句,它的工作让我感到惊讶)。会不会和我通过 FTP 上传文件的方式有关?

标签: php encoding utf-8 updates


【解决方案1】:

如我所读:

PHP 5.6 中的 default_charset php.ini 设置从空更改为 UTF-8。如果您尝试在 HTML 头中设置不同的字符集,这可能会破坏 HTML 输出。它还可能破坏 htmlentities() 和 htmlspecialchars 等函数。

src:https://www.saotn.org/php-56-default_charset-change-may-break-html-output/

在我的例子中,我曾经使用 php 函数 mb_http_output('UTF-8'); 将默认字符集设置为 UTF-8,但对于 PHP5.6,我删除了该函数,因为它看起来是多余的。它使字符再次显示为可读。

【讨论】:

    【解决方案2】:

    如果你不想使用php的header()函数,那么你可以使用html的meta标签。

    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    

    请检查这是否有帮助。

    【讨论】:

    • @DeepKakkar deceze 是对的。这与元标记无关(我同时使用了两者,但现在使用了问题中的那个),它一定是 PHP 问题,因为它以前有效。
    • 你也只升级过php或mysql版本吗?如果是 mysql mysql_set_charset('utf8',$link);将此添加为连接后的第一个查询。如果是 PDO,您可以通过这种方式使用 $options = array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', ); $dbh = new PDO($dsn, $username, $password, $options);
    • @DeepKakkar 我只更新 PHP,无论如何我已经设置了 mysql 字符集,我使用 mysqli 而不是 PDO。
    猜你喜欢
    • 1970-01-01
    • 2015-08-06
    • 2016-01-03
    • 2013-01-29
    • 2013-07-19
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    相关资源
    最近更新 更多