让我们从使用NumberFormatter
化货币的一段简单代码开始:
$formatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
echo $formatter->formatCurrency(123456789, 'JPY');
这将打印:¥123,456,789
.
这是确定的,如果你想格式化货币。
但我想做的是得到货币符号(例如¥)为给定的货币ISO 4217代码(例如日元)。
我的第一个猜测是尝试使用:
$formatter->getSymbol(NumberFormatter::CURRENCY_SYMBOL);
但这为构造函数(en_US)中给定的区域设置提供了货币符号,在我的例子中是$。
有没有办法在PHP中通过货币ISO 4217代码获得货币符号?
9条答案
按热度按时间polhcujo1#
首先,没有国际通用的全球货币符号表,地球上的任何人都可以阅读和理解。
每个地区/国家的货币符号都不同,这就是为什么您必须使用浏览器/用户区域设置,根据阅读者来确定货币符号。
正确的方法正如您所猜测的那样,使用NumberFormatter::CURRENCY_SYMBOL,但首先必须设置适当的语言环境,如en-US@currency=JPY:
这样,符号将可被用户理解。
例如,$符号将为:
k75qkfdt2#
我使用https://github.com/symfony/Intl实现了这一点:
退货
Symfony版本〉4.3
值得指出的是,对于SF4.3及更高版本,这已被弃用:
因此,您可以改为:
5gfr0r5j3#
由于符号可以是多字节的,我使用mb_*()函数来正确地获取所有非标点符号和非数字字符,这些字符只会离开符号。
xjreopfe4#
如果使用函数
setlocale("LC_ALL", "es_AR");
设置区域设置,则可以使用localeconv()['currency_symbol']
或localeconv()['int_curr_symbol']
获取区域设置货币符号和货币符号的国际变体。de90aj5v5#
您可以使用Symfony国际组件
使用
composer require symfony/intl
通过composer安装然后使用以下代码获取HTML符号
sg24os4d6#
Cryptic有一个很好的答案,但有一个更简单的方法:
这是一个很好的简单的内联解决方案,不需要声明另一个函数,但是它也不能正确处理所有情况--例如输出中包含字母的货币。但是对于区分$和£,它可以很好地工作。
f87krz0w7#
将给予你一个关联数组的3个字母的货币代码,以他们的符号。
然后可以这样使用:
avwztpqn8#
我用了这个代码和这个代码在php
我得到了PHP的货币符号
我也试过用HTML代码“₱”来写PHP,但是在php服务器中使用php mail时不起作用,特别是如果你使用的是电子邮件服务器。
试试这个代码。
db2dz4w89#
试试这个变体: