如何从PHP Intl(ICU库)中的货币代码获取货币符号

Joe*_*Joe 4 php currency numberformatter

在PHP我知道货币代码(欧元,英镑,美元...),但我不知道区域设置.我需要为他们获取货币符号

GBP -> £
EUR -> €
USD -> $
Run Code Online (Sandbox Code Playgroud)

运用

$obj = new \NumberFormatter( null, \NumberFormatter::CURRENCY);
echo $obj->formatCurrency( null, 'EUR');
Run Code Online (Sandbox Code Playgroud)

我可以得到€0.00,因此NumberFormatter库可以将货币代码转换为货币符号.但是如何才能获得货币符号?

$obj = new \NumberFormatter( null, \NumberFormatter::CURRENCY);
$obj->setTextAttribute ( \NumberFormatter::CURRENCY_CODE, 'EUR');
echo $obj->getSymbol ( \NumberFormatter::CURRENCY_SYMBOL);
Run Code Online (Sandbox Code Playgroud)

也不要做翻译并返回$ always.

Bra*_*lly 9

不幸的是,这并不像应该的那样容易,但是这里是如何通过货币代码获取货币符号,用于区域设置:

function getCurrencySymbol($locale, $currency)
{
    // Create a NumberFormatter
    $formatter = new NumberFormatter($locale, NumberFormatter::CURRENCY);

    // Prevent any extra spaces, etc. in formatted currency
    $formatter->setPattern('¤');

    // Prevent significant digits (e.g. cents) in formatted currency
    $formatter->setAttribute(NumberFormatter::MAX_SIGNIFICANT_DIGITS, 0);

    // Get the formatted price for '0'
    $formattedPrice = $formatter->formatCurrency(0, $currency);

    // Strip out the zero digit to get the currency symbol
    $zero = $formatter->getSymbol(NumberFormatter::ZERO_DIGIT_SYMBOL);
    $currencySymbol = str_replace($zero, '', $formattedPrice);

    return $currencySymbol;
}
Run Code Online (Sandbox Code Playgroud)

使用区域设置进行测试:ar,cs,da,de,en,en_GB,en_US,es,fr,fr_CA,he,it,ja,ko,nb,nl,ru,sk,sv,zh

货币测试:澳元,巴西雷亚尔,加元,人民币,欧元,英镑,港元,英镑,英镑,日元,韩元,墨西哥比索,纽元,泰铢,新台币,美元,越南盾,XAF,XCD,XOF,XPF

  • 有一种更简单的解决方案。[在 PHP 中获取货币符号](/sf/answers/2101874211/) (2认同)

小智 -1

可能不是最好的解决方案,但你总是可以做类似的事情......

$obj = new \NumberFormatter( 'en_us', \NumberFormatter::CURRENCY);
$formattedValue = $obj->formatCurrency( 0, 'EUR');
$currencySymbol = trim(str_replace('0.00','',$formattedValue));
Run Code Online (Sandbox Code Playgroud)

重要的是使用您知道预期输出格式的区域设置和值(例如 en_us 和 0.00),然后您可以正确选择货币符号。

注意:这可能需要对某些货币进行一些调整