获取 PHP 格式的货币符号

2022-08-30 10:36:04

让我们从简单的代码段开始,用以下格式格式化货币:NumberFormatter

$formatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
echo $formatter->formatCurrency(123456789, 'JPY');

此打印: .¥123,456,789

如果你想格式化钱,这是可以的。

但我想做的是为给定货币ISO 4217代码(例如JPY)获取货币符号(例如¥)。

我的第一个猜测是尝试使用:

$formatter->getSymbol(NumberFormatter::CURRENCY_SYMBOL);

但这给出了构造函数(en_US)中给出的区域设置的货币符号,在我的情况下是$。

有没有办法在PHP中通过货币ISO 4217代码获取货币符号?


答案 1

首先,没有国际全球货币符号表,地球上的任何人都可以阅读和理解。

在每个地区/国家/地区,货币符号将有所不同,这就是为什么您必须根据谁在阅读,使用浏览器/用户区域设置来确定它们。

正确的方法是像你猜到的那样,使用NumberFormatter::CURRENCY_SYMBOL,但你首先必须设置适当的区域设置,如en-US@currency=JPY

$locale='en-US'; //browser or user locale
$currency='JPY';
$fmt = new NumberFormatter( $locale."@currency=$currency", NumberFormatter::CURRENCY );
$symbol = $fmt->getSymbol(NumberFormatter::CURRENCY_SYMBOL);
header("Content-Type: text/html; charset=UTF-8;");
echo $symbol;

这样,用户就可以理解符号。

例如,$symbol将是:

  • 加元:美国加元,罗马尼亚加元,伊朗$CA
  • 伊朗里亚尔(IRR):美国内部收益率,而伊朗将是ریال

答案 2

我使用 https://github.com/symfony/Intl 实现了这一点:

Symfony\Component\Intl\Intl::getCurrencyBundle()->getCurrencySymbol('EUR')

返回

'€'.

塞姆丰尼 4.3 >

值得指出的是,对于SF4.3及更高版本,这已被弃用:

/**
 * Returns the bundle containing currency information.
 *
 * @return CurrencyBundleInterface The currency resource bundle
 *
 * @deprecated since Symfony 4.3, to be removed in 5.0. Use {@see Currencies} instead.
 */
public static function getCurrencyBundle(): CurrencyBundleInterface
{

因此,相反,您可以执行以下操作:

use Symfony\Component\Intl\Currencies;
echo Currencies::getSymbol('AUD'); 

推荐