在两个不同的服务器上使用money_format的不同结果

时间:2018-12-06 00:47:07

标签: php locale currency

我正在使用以下代码

<?php
$moneyFormat        = '%-#15.2n';
$moneyFormat_none   = '%!-#15.2n';

$locales = array('en_US',
                 'en_EU',
                 'en_GB',
                 'zh_CN',
                 'pl_PL',
                 'ja_JP',
                 'ko_KR',
                 'zh_SG',
                 'zh_TW');
foreach($locales as $key => $value) {
    setlocale(LC_MONETARY, $value);

    echo '<tr>';
        echo '<td align="center">' . $value . '</td>';
        echo '<td align="right">' . money_format($moneyFormat, 12345.67) . '</td>';
        echo '<td align="right">' . money_format($moneyFormat_none, 12345.67) . '</td>';
    echo '</tr>';
};
echo '<tr><td colspan="3"><hr></td></tr>';

setlocale(LC_MONETARY, 'pl_PL.UTF-8');

echo '<tr>';
    echo '<td align="center">pl_PL.UTF-8</td>';
    echo '<td align="right">' . money_format($moneyFormat, 12345.67) . '</td>';
    echo '<td align="right">' . money_format($moneyFormat_none, 12345.67) . '</td>';
echo '</tr>';

setlocale(LC_MONETARY, 'pl_PL.utf8');

echo '<tr>';
    echo '<td align="center">pl_PL.utf8</td>';
    echo '<td align="right">' . money_format($moneyFormat, 12345.67) . '</td>';
    echo '<td align="right">' . money_format($moneyFormat_none, 12345.67) . '</td>';
echo '</tr>';

在我的本地计算机上(masOS 10.14.1,PHP 5.6.38),我得到以下结果: enter image description here

在另一台机器上(CentOS Linux 7(核心),PHP 5.6.38),我得到: enter image description here

如果我在命令行上运行locale -a,则会得到已安装语言环境的列表...阵列中的每个语言环境都存在于两台计算机的输出中(utf-8稍有不同)。

查看pl_ *语言环境... macOS机器包括

  • pl_PL.UTF-8
  • pl_PL.ISO8859-2
  • pl_PL

Linux计算机包含

  • pl_PL
  • pl_PL.iso88592
  • pl_PL.utf8

为什么输出在macOS计算机上看起来正确,但在Linux计算机上却不正确?这是需要在PHP.ini文件中解决的还是基于服务器的?我当时的假设是,如果在locale -a下列出了语言环境,则在两个地方都应按预期工作。

0 个答案:

没有答案