49

お金をフォーマットするための簡単なコードから始めましょう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で通貨ISO4217コードによって通貨記号を取得する方法はありますか?

4

8 に答える 8

55
于 2015-05-04T09:30:28.383 に答える
22

私はhttps://github.com/symfony/Intlを使用してこれを達成しました:

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

戻り値

'€'.

Symfony 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'); 
于 2013-06-05T14:10:01.090 に答える
5

記号はマルチバイトになる可能性があるため、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);
于 2012-12-16T01:16:57.930 に答える
4

この機能を使用してロケールを設定する場合またはをsetlocale("LC_ALL", "es_AR"); 使用して、ロケール通貨記号と通貨記号の国際バリエーションを取得することができます。localeconv()['currency_symbol']localeconv()['int_curr_symbol']

于 2016-05-23T20:55:15.977 に答える
1

SymfonyIntlコンポーネントを使用できます

を使用してcomposer経由でインストールします composer require symfony/intl

次に、次のHTMLシンボルを取得します

use Symfony\Component\Intl\Currencies;
\Locale::setDefault('en');
$symbol = Currencies::getSymbol('INR'); // => '₹'
echo $symbol;
于 2020-04-18T22:09:46.247 に答える
0

Crypticには良い答えがありますが、それを行うためのより簡単な方法があります。

preg_replace('#[a-z0-9.]*#i', '', $formatter->formatCurrency('0', $currency))

これは、別の関数を宣言する必要のない、優れたシンプルなインラインソリューションですが、すべてのケース、つまり文字が出力の一部である通貨を適切に処理するわけでもありません。しかし、たとえば$と£を区別するためには、問題なく機能します。

于 2014-03-14T11:02:29.877 に答える
0
Zend_Locale::getTranslationList('CurrencySymbol')

シンボルに3文字の通貨コードの連想配列を提供します。

その後、次のように使用できます。

$curArr = Zend_Locale::getTranslationList('CurrencySymbol');
echo $curArr['GBP'];
于 2016-03-16T02:14:44.260 に答える
-3

このバリアントを試してください:

$formatter->getSymbol(NumberFormatter::INTL_CURRENCY_SYMBOL);
于 2013-02-07T07:57:22.540 に答える