1

我正在使用setlocalestrftime以巴西葡萄牙语显示本地化月份名称:

setlocale(LC_ALL, 'pt_BR');
$meses = array();
for($m=1; $m<=12; $m++) {
    $meses[$m] = strftime('%B', mktime(0, 0, 0, $m, 1));
}

这在我的开发环境中运行良好,但在生产服务器上它在 3 月失败(在葡萄牙语中是“março”)。如果我utf8_encode是月份名称,它可以在服务器上运行,但在我的开发环境中,我会得到一个双编码输出。我怀疑这是因为每台机器上的语言环境编码不同。我想正确的解决方案是在服务器上为 pt_BR 安装一个 UTF8 语言环境设置,但如果可能的话,我想避免这种情况(长话短说,服务器管理员,呃,很难)。

是否可以从 PHP 中检测到当前语言环境的编码,所以我可以围绕这个问题进行编码,并使我的代码无论语言环境/编码设置如何都能正常工作?

4

3 回答 3

3

利用

echo setlocale(LC_CTYPE, 0); // en_US.UTF-8

获取当前编码,然后解决它。

将零传递setLocale给您的语言环境值。在这种情况下,我们得到LC_CTYPE设置的值。

于 2013-04-23T19:27:34.197 回答
1

在问题下方的评论中,我们可以解决问题。这是因为在一个使用pt_BR.uft-8另一个的两个系统上的语言环境名称不同pt_BR.UTF8

最后我们同意在配置文件中定义语言环境并使用它。

于 2013-04-23T19:37:54.207 回答
-1

要获取 strftime 使用的编码,请使用

 mb_internal_encoding()

要将 stftime 编码的字符串转换为 utf-8,请使用

mb_convert_encoding(strftime($format, $timestamp), 'UTF-8', mb_internal_encoding());
于 2016-04-13T15:48:02.190 回答