本地主机和远程服务器之间的ICONV编码不同


ICONV encoding differs between localhost and remote server

我在本地主机和远程服务器上有编码问题。例如,当我在本地主机上选择俄语时,显示我"вторник 14.07.15"(正确答案),但在远程服务器上显示"Р ' С, РѕСЂРЅРёРє 14.07.15"。在lang.ru.php中是UTF-8编码,文件看起来像这样:

setlocale(LC_ALL, 'ru_RU.UTF-8', 'ru_RU', 'ru', 'rus', 'russian', 'ru_RU.ISO_8859-5', 'Russian_Russia.1251');
$lang = array();
$lang['code'] = "ru";
$lang['PAGE_TITLE'] = 'Hello';
在index.php中显示date:
echo "<span class='daydatetime'>" . iconv('Windows-1250', 'UTF-8//TRANSLIT',strftime("%A <br> %d.%m.%y", strtotime("+ 1 days"))) . "</span>";

为什么在本地主机一切都很好,在远程服务器是破碎的编码?如果有人帮助我,我会非常感激。致以最亲切的问候。

从php的setlocale页面:

如果locale是一个数组或后面跟着附加参数,则每个数组元素或参数将尝试设置为新的区域设置,直到成功。

调用setlocale并提供一些具有不同编码的区域设置 (ru_RU。UTF-8, ru_RU.ISO_8859-5)可能与iconv()调用中的期望不匹配:

string iconv (string $in_charset, string $out_charset, string $str)

$in_charset是Windows-1250。您可以通过

获取服务器编码
$in_charset = nl_langinfo(CODESET);

$out_charset也应该匹配Content-Type头中的字符集