如何将具有稀疏空间的数字格式化为千位分隔符?

时间:2012-12-07 10:43:40

标签: php number-formatting multibyte

而不是显示如下格式的数字:

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

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

我正在使用PHP函数:

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

但是,它产生了这个:

1234567.890

我已经将http标头和html文档设置为UTF-8。我认为这个问题是由于瘦空间是一个多字节字符而产生的。我无法找到一个处理此问题的mb字符串函数。

有没有人知道如何处理这个问题?

2 个答案:

答案 0 :(得分:5)

  

5.4.0此函数现在支持dec_point和thousands_sep中的多个字节。在旧版本中只使用了每个分隔符的第一个字节。

     

http://php.net/number_format

基于此,对于旧版本的PHP版本中的问题,这是一个非常hacky修复,而不是滚动自己的number_format实现:

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

答案 1 :(得分:0)

在更新的(> 5.4.0)版本的PHP中,只需将稀疏空间直接用作分隔符,如下所示:

number_format($value, 0, ".", "&thinsp;");