2014-11-14 12 views
4

В PHP Я знаю коды валют (EUR, GBP, USD ...), но я не знаю языковой стандарт. мне нужно, чтобы получить символ валюты для нихКак получить символ валюты по коду валюты из PHP Intl (библиотека ICU)

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.

+0

Если вы хотите получить решение, вам необходимо локальное! [Проверить этот ответ: Получить символ валюты в PHP] (https://stackoverflow.com/a/30026774/5356216) –

+0

Возможный дубликат [Получить символ валюты в PHP] (https://stackoverflow.com/questions/13897516/ get-currency-symbol-in-php) –

ответ

-1

Возможно, не самое лучшее решение, но вы всегда можете сделать что-то вроде ...

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

Важно использует локали и значение, где вы знаете ожидаемый выходной формат (например, en_US и 0.00), и вы может затем правильно выбрать символ валюты.

Примечание: это может понадобиться корректировка для определенных валют

+0

Это не удастся с валютами в Индии, так как они используют разные 0 (0) плюс несколько других стран, использующих другие символы. – shiznatix

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; 
} 

Протестированы локалями: ар, CS, да, де, еп, en_GB, ru_RU, ES, FR, fr_CA, он, она, Ja, ко, пь, п, р, ск, св, ж

Протестировано с валютами: AUD, BRL, CAD, CNY, EUR, GBP, HKD, ILS, INR, JPY, KRW, MXN, NZD, THB, TWD, USD, VND, XAF, XCD, XOF, XPF

+0

Я думаю, что '$ zero = $ formatter-> getSymbol (NumberFormatter :: ZERO_DIGIT_SYMBOL);' не требуется, и вы можете использовать '0' в последней операции' $ currencySymbol = str_replace (0, '', $ formattedPrice); ' –

+1

Существует более простое решение. [Получить символ валюты в PHP] (https://stackoverflow.com/a/30026774/5356216) –

+0

@ ZoltánSüle лучше! Благодаря! –

Смежные вопросы