You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中NumberFormatter生成的货币字符串为何与相同字面量不相等

问题原因分析

核心原因是两个字符串里的空格类型不一致:

  • 你手写的$expected中GBP和数字之间是普通ASCII空格(编码为0x20)
  • NumberFormatter生成的$currency中对应位置的是不换行空格(NBSP,Unicode编码U+00A0,UTF-8下字节表现为0xC2A0)

这两种空格视觉上完全一致,但底层编码不同,所以松散相等==和严格相等===的判定结果都是不相等。

验证方法

你可以通过打印两个字符串的十六进制编码直接看到差异:

echo bin2hex($expected) . PHP_EOL;
echo bin2hex($currency) . PHP_EOL;

输出结果里普通空格对应20,不换行空格对应c2a0,差异一目了然。

解决办法

  • 方案一:把生成的货币字符串中的不换行空格替换为普通空格后再比较
$currency = str_replace("\xc2\xa0", " ", $currency);
// 此时再做相等判定就会返回equals
  • 方案二:不要手写预期值,直接用同规则的NumberFormatter生成预期对比值,从根源避免特殊字符差异问题。

内容的提问来源于stack exchange,提问作者Chirag Kalani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:09:01