8

我正在尝试用 strftime 回显日期,但我对 utf-8 字符的编码很糟糕。(基本上是重音字符)

setlocale(LC_TIME, 'spanish');
define("CHARSET", "iso-8859-1");
echo strftime("%A, %d de %B",strtotime($row['Date']));

这部分代码有问题吗?一切都以 utf-8 编码,并在其上方回显一个“á”字符,正确显示该字符。

4

4 回答 4

19

尝试添加 utf8_encode()

setlocale(LC_TIME, 'spanish');
define("CHARSET", "iso-8859-1");
echo utf8_encode(strftime("%A, %d de %B",strtotime($row['Date'])));
于 2012-05-26T08:13:35.873 回答
11

我有点晚了,但谷歌搜索我发现了这篇文章。答案在我的情况下是不合适的。我遇到了与 OP 相同的问题,但我的语言环境是 fr_FR,并且在我的计算机上一切正常,但在开发服务器上却不行。

如果我添加一个 iconv (正如大多数人在你谷歌这个问题时建议的那样),它可以在开发服务器上运行,但不能在我的计算机上运行,​​所以我需要一个“防弹”解决方案,它在任何地方都可以工作(因为还有一个生产服务器)。

所以,这里的问题是setlocale,这个函数改变了当前执行的语言环境,但是每个语言环境都与一个字符集相关联,如果没有指定,它会回退到你系统的默认设置(我认为,在我的情况下使用 fr_FR 语言环境时,它回落到 ISO-8859-1)。您可以使用该locale -a命令列出计算机/服务器上所有可用的语言环境。你很可能会看到你想要的语言环境,使用“.UTF-8”(在我的例子中是“fr_FR.UTF-8”),这就是你必须设置它的方式:setlocale('fr_FR.UTF-8');

于 2014-11-26T15:47:37.950 回答
4

也许:

echo iconv("iso-8859-1","utf-8",strftime("%A, %d %B",strtotime($row['Date'])));
于 2012-05-26T08:52:16.973 回答
0

没有iconv的可以使用mb函数将stftime编码的字符串转成utf-8

echo mb_convert_encoding(strftime("%A, %d de %B",strtotime($row['Date'])), 'UTF-8', mb_internal_encoding());
于 2016-04-13T15:49:28.510 回答