【问题标题】:PHP money format returns strings with/ without currency prefix on different serversPHP 货币格式在不同服务器上返回带/不带货币前缀的字符串
【发布时间】:2023-04-01 14:10:01
【问题描述】:

我的客户有 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' 然而在现场它返回的价格没有英镑前缀,只是'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,2014 年 5 月 15 日星期二: 2018 年太平洋夏令时间 22:40

其他发现... 我现在发现,当从循环中多次调用此代码时(即当我返回大量产品时),就会出现问题。如果在 php 脚本执行期间只调用一次(返回单个产品),它就可以工作!

【问题讨论】:

    标签: php linux locale


    【解决方案1】:

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

    setlocale(LC_MONETARY, 'en_GB.utf8');
    

    【讨论】:

    • 对不起 - 我应该提到 - 我已经尝试过了,但没有任何区别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多