在西班牙语中使用strftime时编码错误?

lis*_*aro 8 php

我试图用strftime回显日期,但我在utf-8字符上编码不好.(基本上是重音字符)

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

这段代码有什么问题吗?所有内容都以utf-8编码,并在上方回显'á'字符,正确显示字符.

Gal*_*len 19

尝试添加utf8_encode()

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


Nao*_*omi 11

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

如果我添加一个iconv(正如大多数人建议你谷歌这个问题),它可以在开发服务器上工作但不能在我的电脑上工作,所以我需要一个"防弹"的解决方案,它可以在任何地方工作(因为还有一个生产服务器).

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