提问人:Chirag Kalani 提问时间:10/28/2021 最后编辑:Chirag Kalani 更新时间:10/28/2021 访问量:62
PHP - 为什么相等的字符串不等于 NumberFormatter
PHP - why equal string are not equal with NumberFormatter
问:
为什么即使两个字符串相等,下面的代码回显也不相等?
$number = 1234567.89;
$expected = 'GBP 1,234,567.89';
$fmt = new NumberFormatter('en_AU@currency=GBP', NumberFormatter::CURRENCY);
$currency = $fmt->formatCurrency($number, 'GBP');
echo "$expected = $currency ?" . PHP_EOL;
echo $expected == $currency ? 'equals' : "not equal";
输出
GBP 1,234,567.89 = GBP 1,234,567.89 ?
not equal
任何帮助都会很有帮助,谢谢
答:
0赞
hakki
10/28/2021
#1
因为变量在“GBP”后面有一个空格$expected
$expected = 'GBP 1,234,567.89';
不等于“GBP1,234,567.89”;
实际上,您可以调试它们;
echo $expected;
echo "<br>";
echo $currency;
评论
1赞
Chirag Kalani
10/28/2021
嘿,我刚刚发现,看到我添加的答案,这是因为一个特殊的字符。谢谢
0赞
Chirag Kalani
10/28/2021
#2
好吧,尝试了几件事,我得到了答案。$exoected 和 $currency 具有不同的编码。
print_r([mb_detect_encoding($expected), mb_detect_encoding($currency)]);
Array
(
[0] => ASCII
[1] => UTF-8
)
$currency 中的空格字符是 194 ASCII 数字,而 $expected 中的空格字符是 32
if (preg_match('/[^a-zA-Z0-9 ]+/', $number, $matches)) {
print_r(ord($matches[0]));
print_r(ord(' '));
}
希望这能帮助那些挠头的人
评论
0赞
CBroe
10/28/2021
实际上很可能是(在使用 UTF-8 时,不能只查看单字节值),这将是一个不间断的空格。格式化程序在这个位置使用一个是有道理的,因为你通常不希望在一行文本的末尾显示,而是在下一行文本中换行。194 160
GBP
1,234,567.89
评论