在PHP中获取货币符号

时间:2012-12-16 00:35:25

标签: php formatting currency

让我们从简单的代码开始,用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)中给出的locale的货币符号,在我的情况下是$。

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

8 个答案:

答案 0 :(得分:35)

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

在每个地区/国家/地区,货币符号会有所不同,这就是您必须根据使用浏览器/用户区域设置阅读的人来确定货币符号的原因。

正如您猜测的那样,正确的方法是使用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;

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

例如,$符号将为:

  • 加元(CAD):美国 CA $ ,罗马尼亚 CAD ,伊朗 $ CA
  • 伊朗里亚尔(IRR): IRR 在美国,而在伊朗则

答案 1 :(得分:13)

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

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

返回

'€'.

答案 2 :(得分:4)

如果使用此功能setlocale("LC_ALL", "es_AR");设置区域设置 您可以使用localeconv()['currency_symbol']localeconv()['int_curr_symbol']来获取区域货币符号和货币符号的国际变体。

答案 3 :(得分:3)

由于符号可以是多字节,我使用mb _ *()函数来正确地获取所有非标点字符和非数字字符,这些字符只会留下符号。

function get_currency_symbol($string)
{
    $symbol = '';
    $length = mb_strlen($string, 'utf-8');
    for ($i = 0; $i < $length; $i++)
    {
        $char = mb_substr($string, $i, 1, 'utf-8');
        if (!ctype_digit($char) && !ctype_punct($char))
            $symbol .= $char;
    }
    return $symbol;
}

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

答案 4 :(得分:0)

答案 5 :(得分:0)

Zend_Locale::getTranslationList('CurrencySymbol')

将为您的符号提供一个包含3个字母货币代码的关联数组。

然后可以像这样使用:

$curArr = Zend_Locale::getTranslationList('CurrencySymbol');
echo $curArr['GBP'];

答案 6 :(得分:0)

您可以使用 Symfony Intl 组件

使用composer require symfony/intl通过composer安装它

然后获得带有以下内容的HTML符号

use Symfony\Component\Intl\Currencies;
\Locale::setDefault('en');
$symbol = Currencies::getSymbol('INR'); // => '₹'
echo $symbol;

答案 7 :(得分:-1)

尝试此变体:

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