代码:
<?php
setlocale(LC_ALL, 'ru_RU');
$date_ru = strftime('%d %B %Y', strtotime('2018-01-31'));
echo($date_ru);
?>
输出:
1)本地服务器:31января2018
2)远程服务器: 31 2018
(正是那些奇怪的符号而不是月份名称)。
设置:
我已检查使用local -a
安装的区域设置并运行php -i
以获取有关这两台服务器的信息。
本地服务器:
...以及所有其他可能的语言环境......
$ _ SERVER ['LANG'] =&gt; ru_RU.UTF-8
PHP版本=&gt; 7.1.12
远程服务器:
ru_RU.utf8
$ _ SERVER ['LANG'] =&gt; ru_RU.UTF-8
PHP版本=&gt; 7.0.22-0ubuntu0.16.04.1
如何让远程服务器上的输出与本地输出相同?
更新:
如果我改为setlocale(LC_ALL, 'ru_RU.UTF-8');
本地服务器: 31января2018(如更改前)
远程服务器: 2018年2月31日
虽然我在这里没有得到奇怪的符号,但结果并不令人满意。 这里的最后一封信是最重要的。当'Январь'是主格(不是我需要的)时,'января'是具有创造性的情况(我想要的)。
答案 0 :(得分:0)
问题在于Ubuntu的服务器包使用的语言环境与我在本地环境中使用的语言环境不同。 我无法从本地导入到Ubuntu的区域设置(想知道它是否可能),所以我只写了一个解决方法(简单的函数将'Январь'等月份名称转换为'января'等等。)
function convert($str) {
$rus = array('/январь/ui', '/февраль/ui', '/март/ui', '/апрель/ui', '/май/ui', '/июнь/ui', '/июль/ui', '/август/ui', '/сентябрь/ui', '/октябрь/ui', '/ноябрь/ui', '/декабрь/ui');
$lat = array('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
// return str_ireplace($rus, $lat, $str);
return preg_replace($rus, $lat, $str);
}