PHP money格式在不同服务器上返回带/不带货币前缀的字符串

时间:2018-07-12 10:53:31

标签: php linux locale

我的客户端有2台服务器,分别是临时服务器和实时服务器。他们有不同的PHP版本(我知道-他们以这种方式提供)。我有以下代码:

setlocale(LC_MONETARY, 'en_GB');
$product = wc_get_product( $product_id );
if ($product->get_price()){
   return (string) money_format('%i', $product->get_price());
}

在登台服务器上,它返回格式如下的价格:“ GBP 10.00” 但是在直播时,它返回的价格没有GBP前缀,仅为“ 10.00”

在两台服务器上运行时: 语言环境-a | grep en_GB 我得到:

en_GB
en_GB.iso88591
en_GB.iso885915
en_GB.utf8

登台服务器在Linux版本2.6.32-696.18.7.el6.x86_64(mockbuild@c1bl.rdu2.centos.org)上运行PHP 5.6.21(gcc版本4.4.7 20120313(Red Hat 4.4.7- 18)(GCC))#1 SMP 2018年1月4日星期四17:31:22 UTC

Live在Linux版本4.9.96mtv23(ci_slave@cislave73-git.mtsvc.net)(gcc版本4.7.2(Debian 4.7.2-5))上运行PHP 5.3.28#1 SMP 5月15日星期二: 2018年美国夏令时22:40

其他发现... 我现在发现,当从循环中多次调用此代码时(即当我退回很多产品时),就会发生此问题。如果只是在执行php脚本(返回单个产品)期间调用了它一次,那么它就起作用了!

1 个答案:

答案 0 :(得分:0)

您应该使用utf-8字符集设置语言环境:

setlocale(LC_MONETARY, 'en_GB.utf8');