非ASCII字符在生产中不显示

时间:2013-10-25 05:11:06

标签: php amazon-web-services gettext

在localhost上,正确显示西班牙语,俄语和罗马尼亚语言,但是当我们将站点移动到AWS上的生产服务器时,我们的文本显示不正确。

我们使用get text和.po文件来显示我们的语言。直接来自我们数据库的文本显示正常,只有来自.po文件的文本被破坏。

破碎的例子: http://ru.artzoco.com/seller/102/YallooArt

它应该如何看待: http://en.artzoco.com/seller/102/YallooArt

我们的GetText代码:

//language sudomain process  http://stackoverflow.com/q/18996503/1744357
$host = explode(".",$_SERVER['HTTP_HOST']);
switch ($host[0]) {
  case 'en':
    $locale = 'en_US';
    break;
  case 'es':
    $locale = 'es_ES';
    break;
  case 'ru':
    $locale = 'ru_RU';
    break;
  case 'ro':
    $locale = 'ro_RO';
    break;
  default:
    $locale = 'en_US';
    break;
}
putenv("LANG=$locale"); 
$loc_es = setlocale(LC_ALL, $locale); 
bindtextdomain("translations", "../../locale/");  
textdomain("translations");

2 个答案:

答案 0 :(得分:0)

我在php manual entry for gettext

中看到了这一点
  

注意:

     

对某些系统和putenv()设置语言是不够的   应该用于定义当前的语言环境。

本地计算机和生产服务器默认设置之间可能存在差异,因此请尝试将上面的环境变量明确设置为所需语言。

我的下一个最好的猜测是,这是来自数据库的生产服务器上的字符编码问题(不确定您是否使用过它)。

您是否在查询mysql数据源中的数据?如果是这样,请在检索之前尝试mysql_set_charset函数:

mysql_set_charset('utf8');

答案 1 :(得分:0)

我发现对于Linux服务器,我需要专门为我们的代码调用此行:

bind_textdomain_codeset("translations", "utf-8");

由于我们在本地主机上的Windows服务器上,因此没有此代码行。