【问题标题】:Non-ASCII characters not displaying right in production非 ASCII 字符在生产中无法正确显示
【发布时间】:2013-10-25 05:11:05
【问题描述】:

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

我们正在使用获取文本和 .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");

【问题讨论】:

  • 如果您发布调用gettext的代码可能会有所帮助
  • 我更新了我们的 gettext 代码。感谢您的回复

标签: php amazon-web-services gettext


【解决方案1】:

我在php manual entry for gettext看到这个:

注意:

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

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

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

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

mysql_set_charset('utf8');

【讨论】:

    【解决方案2】:

    我发现对于一个 linux 服务器,我需要专门为我们的代码调用这一行:

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

    由于我们在本地主机上的 Windows 服务器上,它在没有此代码行的情况下工作。

    【讨论】:

      猜你喜欢
      • 2019-05-21
      • 1970-01-01
      • 2021-10-29
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      相关资源
      最近更新 更多