我使用setlocale和strftime以巴西葡萄牙语显示本地化月份名称:
setlocale(LC_ALL, 'pt_BR');
$meses = array();
for($m=1; $m<=12; $m++) {
$meses[$m] = strftime('%B', mktime(0, 0, 0, $m, 1));
}这在我的开发环境中工作得很好,但是在生产服务器上,它在三月失败了(葡萄牙语是"março")。如果我对月份名称执行utf8_encode操作,它将在服务器上运行,但在我的开发环境中,我会得到一个双重编码的输出。我怀疑这是因为每台机器上的区域编码不同。我想正确的解决方案是在服务器上为pt_BR安装一个UTF8语言环境设置,但如果可能的话,我想避免这种情况(长话短说,服务器管理员是,呃,困难的)。
是否可以从PHP中检测当前语言环境的编码,这样我就可以绕过这个问题进行编码,并使我的代码在不考虑语言环境/编码设置的情况下工作?
发布于 2013-04-24 03:37:54
在问题下面的注释中,我们可以解决这个问题。这是因为两个系统上的区域设置名称不同,一个系统使用pt_BR.uft-8,另一个系统使用pt_BR.UTF8。
最后,我们同意在一个配置文件中定义语言环境并使用它。
发布于 2013-04-24 03:27:34
使用
echo setlocale(LC_CTYPE, 0); // en_US.UTF-8来获取当前的编码,然后解决它。
将零传递给setLocale会给出区域设置值。在本例中,我们将获取LC_CTYPE设置的值。
发布于 2016-04-13 23:48:02
要获取strftime使用的编码,请使用
mb_internal_encoding()要将stftime编码的字符串转换为utf-8,请使用
mb_convert_encoding(strftime($format, $timestamp), 'UTF-8', mb_internal_encoding());https://stackoverflow.com/questions/16177459
复制相似问题