当前位置: 首页 > 知识库问答 >
问题:

在PHP中获取货币符号

张德佑
2023-03-14

让我们从一段简单的代码开始,用NumberFormatter格式化货币:

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

打印:¥123456789

如果你想格式化货币,这是可以的。

但是我想做的是为给定的货币ISO 4217代码(例如JPY)获得货币符号(例如¥)。

我的第一个猜测是尝试使用:

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

但这为构造函数(en_US)中给定的区域设置提供了货币符号,在我的例子中是$。

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

共有3个答案

孔理
2023-03-14

由于符号可以是多字节的,我使用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);
别俊誉
2023-03-14

我使用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'); 
阎雪峰
2023-03-14

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

在每个地区/国家,货币符号都会有所不同,这就是为什么你必须使用浏览器/用户区域设置,根据阅读者来确定它们。

正确的方法如您所料,使用NumberFormatter::CURRENCY_符号,但首先必须设置适当的区域设置,如en-US@currency=日元:

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

这样,符号将被用户理解。

例如,$symbol将是:

  • 加元(CAD):CA$在美国,CAD在罗马尼亚,$CA在伊朗
  • 伊朗里亚尔(IRR):IRR在美国,而在伊朗将是
 类似资料:
  • 我可以使用ISO 4217代码轻松设置货币,例如“USD”。这将使我能够使用抓取美元符号。getSymbol(),但是,我该如何从货币中提取显示名“dollar”? 我有一个微调器,我想用“美元”、“欧元”、“日元”等货币的名称填充。但是,我无法从ISO 4217代码中提取这些名称。这不是很容易吗? 请注意,我不能使用简单的字符串数组来解决这个问题。这是因为我获取了默认的语言环境,并将其货币添加到

  • 问题内容: 我正在使用我给定的语言环境获取自定义货币格式。但是,这始终包含我不需要的货币符号,我只想要给定语言环境的正确货币数字格式而没有货币符号。 做一个抛出一个异常.. 问题答案: 以下作品。这有点丑陋,但可以履行合同: 您还可以从货币格式中获取模式,删除货币符号,然后从新模式中重构新格式:

  • 问题内容: 我想获得所有可能的可用货币。 Java 7提供了这样的功能。 但是,我仍在使用Java 6进行开发和部署。我可以知道如何获得所有可能的货币吗?代码示例是最受欢迎的。 问题答案: 在研究了ISO表和Currency类文档之后,您似乎可以将货币作为代码或语言环境了。并且Locale类有一个方法。 因此,代码为: 希望这可以帮助。

  • 问题内容: 假设我提供了一个类似于或类似此字符串的字符串(带有数字和小数点以及一些分隔符,例如或或其他不可预测的字符串)。我需要编写一个方法,该方法接受像上面的参数一样的参数,并分别返回像或的String 。 您能否建议最有效,最易读的代码来实现这一目标? 注意:我知道要遍历每个索引,并检查它的重调谐器是否存在,或者 我正在效率和可读性方面寻找更优化的解决方案 谢谢。 问题答案: 这将删除任何不是

  • 我试过... 但那就不允许便士条目了。 我想要增量按钮控制在英镑上升,但仍然想要输入便士的能力。 谢谢,1DMF

  • 问题内容: 存在以下格式的一些 现有代码 ,用于格式化数值: 请注意,我 无法更改代码本身 -我只能更改提供给代码的格式模式。 输出默认语言环境的货币符号的格式模式是什么?本质上,我想实现以下输出: 问题答案: 考虑到您所给的限制,我认为这是不可能的。要获取当前语言环境的货币符号,您需要最少的代码。 如果绝对没有办法向程序中添加代码,则最好使用已建立的符号“ currency ”(¤)。正是出于这