Joe*_*Joe 4 php currency numberformatter
在PHP我知道货币代码(欧元,英镑,美元...),但我不知道区域设置.我需要为他们获取货币符号
GBP -> £
EUR -> €
USD -> $
运用
$obj = new \NumberFormatter( null, \NumberFormatter::CURRENCY);
echo $obj->formatCurrency( null, 'EUR');
我可以得到€0.00,因此NumberFormatter库可以将货币代码转换为货币符号.但是如何才能获得货币符号?
$obj = new \NumberFormatter( null, \NumberFormatter::CURRENCY);
$obj->setTextAttribute ( \NumberFormatter::CURRENCY_CODE, 'EUR');
echo $obj->getSymbol ( \NumberFormatter::CURRENCY_SYMBOL);
也不要做翻译并返回$ always.
不幸的是,这并不像应该的那样容易,但是这里是如何通过货币代码获取货币符号,用于区域设置:
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;
}
使用区域设置进行测试: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
小智 -1
可能不是最好的解决方案,但你总是可以做类似的事情......
$obj = new \NumberFormatter( 'en_us', \NumberFormatter::CURRENCY);
$formattedValue = $obj->formatCurrency( 0, 'EUR');
$currencySymbol = trim(str_replace('0.00','',$formattedValue));
重要的是使用您知道预期输出格式的区域设置和值(例如 en_us 和 0.00),然后您可以正确选择货币符号。
注意:这可能需要对某些货币进行一些调整