如何将带有细小空格的数字格式化为千分隔符?

2022-08-25 00:00:00 number-formatting php multibyte

不显示格式为以下格式的数字:

1,234,567.890,我希望显示格式如下的数字:

1 234 567.890,与此略有不同:
1234 567.890。

我使用的是PHP函数:

number_format($value, 0, ".", " ")

但是,它会产生以下结果:

1�234�567.890

我已经将http头和html文档设置为UTF-8。我认为这个问题的出现是因为空间很小,是一个多字节字符。我找不到处理此问题的MB字符串函数。

有谁知道如何处理这个问题吗?


解决方案

5.4.0该函数现在支持DEC_POINT和千_SEP中的多个字节。在旧版本中,仅使用每个分隔符的第一个字节。

http://php.net/number_format

基于此,以下是对旧版PHP中该问题的一个非常老套的修复,不包括滚动您自己的number_format实现:

$separator = ' ';
echo preg_replace('/(?<=d)x' . bin2hex($separator[0]) . '(?=d)/',
                  $separator,
                  number_format($value, 0, '.', $separator));

相关文章