【问题标题】:UTF-8 dates doesn't encode properlyUTF-8 日期编码不正确
【发布时间】:2014-07-22 19:02:46
【问题描述】:

我很难处理字符集,我怀疑我的函数显示日期返回非 UTF-8 字符(août 被菱形 août 内的问号替换)。

在我的本地服务器上工作时一切都很好,但是当我将我的代码推送到我的登台服务器上时,它无法正确显示。

  • 我的 php 文件保存为 UTF-8 NO BOM
  • 如果我检查我的输出页面,标题指示 UTF-8。
  • 我的本地机器是安装了 MAMP 的 Mac,而我的声明服务器安装了 CentOS 和 cPanel。

这是我怀疑导致问题的部分:

$langCode = "fr_FR"; /* Alos tried  fr_FR.UTF-8 */
setlocale(LC_ALL, $langCode);
$monthName = _(strftime("%B",strtotime($dateStr)))
echo $monthName; /* Alos tried  utf8_encode($monthName) worked on my staging server but not on my local server ! I'm using  */

【问题讨论】:

  • 我认为问题与操作系统或网络服务器有关。
  • août 看起来像正确的 UTF-8,但用作 Latin-1 或类似的。您的浏览器显示的页面字符集是什么?
  • 试试这个echo utf8_decode($monthName);
  • 查看您的服务器发送的标头。我怀疑(作为@triplee)他发送Content-Type: text/html; charset=latin-1
  • 嘿,确保问题出在服务器上,只需尝试在浏览器的视图选项中将字符编码设置为 Unicode 并查看结果。

标签: php utf-8


【解决方案1】:

终于找到了如何找到错误并修复它。

setlocale(LC_ALL, 'fr_FR');

var_dump(mb_detect_encoding(_(strftime("%B",strtotime($dateStr)))));

转储在本地返回UTF-8,在暂存服务器上返回FALSE

PHP.net documentation about mb_detect_encoding()

返回值

检测到的字符编码,如果编码不能被检测到,则为 FALSE 从给定的字符串中检测到。

因此无法检测到字符集。我会尝试“再次”强制它

setlocale(LC_ALL, 'fr_FR.UTF-8');

var_dump(mb_detect_encoding(_(strftime("%B",strtotime($dateStr)))));

这次转储在本地返回UTF-8,在暂存服务器上返回UTF-8。所以我回滚我的代码,看看我第一次尝试使用 fr_FR.UTF-8 时发生了什么,为什么它不起作用?我意识到我正在使用utf8_encode(),就像用户 deceze 在评论这个函数的文档时指出的那样,

In fact, applying this function to text that is not encoded in ISO-8859-1 will most likely simply garble that text.

感谢大家的帮助!

【讨论】:

【解决方案2】:

将此元标记放在<head></head>内的html代码上

<meta charset="UTF-8">

【讨论】:

  • 如果在本地打开文件是个好主意。但是,如果服务器在其标头中发送了错误的字符集,它将无济于事。
【解决方案3】:

您的服务器似乎已配置为发送标头

content-type: text/html; charset=UTF-8

默认。您可以更改服务器配置,也可以从一开始就添加

<?php
    header("content-type: text/html; charset=UTF-8");
?>

自行设置此标头。

【讨论】:

  • 我的服务器与其他所有页面都可以正常工作,除了这个。错误的不是整个页面,而是错误的日期。
【解决方案4】:

你需要使用:

  <?php
  $conn = mysql_connect("localhost","root","root");
  mysql_select_db("test");

  mysql_query("SET NAMES 'utf8'", $conn);//put this line after you select db.

【讨论】:

    猜你喜欢
    • 2016-02-01
    • 2018-10-25
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 2015-12-26
    • 2014-04-02
    • 1970-01-01
    相关资源
    最近更新 更多