在西班牙语的strftime上使用时编码错误


Bad encoding when using on strftime in spanish?

我试图用strftime回显日期,但我在仅utf-8字符上的编码错误。(基本上是重音字符)

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

这部分代码有问题吗?所有内容都以 utf-8 编码,并在其上方回显"á"字符正确显示该字符。

尝试添加 utf8_encode()

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

我有点晚了,但是在谷歌上搜索我找到了这篇文章。答案在我的情况下是不合适的。我遇到了与 OP 相同的问题,但我的区域设置fr_FR,在我的计算机上一切正常,但在开发服务器上则不然。

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

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

也许:

echo iconv("iso-8859-1","utf-8",strftime("%A, %d %B",strtotime($row['Date'])));

对于那些没有 iconv 的人,您可以使用 mb 函数将 stftime 编码字符串转换为 utf-8

echo mb_convert_encoding(strftime("%A, %d de %B",strtotime($row['Date'])), 'UTF-8', mb_internal_encoding());