PHP版本/Docker映像之间的NumberFormatter格式不一致
我目前正在从PHP7.1升级到7.2。我们有一个停靠设置与自定义阿尔卑斯山图像。升级相当轻松,但是我们的测试套件在一件事情上失败了,这件事还不太清楚 我们在测试中运行了以下代码(为简洁起见缩写):PHP版本/Docker映像之间的NumberFormatter格式不一致,php,docker,alpine,icu,Php,Docker,Alpine,Icu,我目前正在从PHP7.1升级到7.2。我们有一个停靠设置与自定义阿尔卑斯山图像。升级相当轻松,但是我们的测试套件在一件事情上失败了,这件事还不太清楚 我们在测试中运行了以下代码(为简洁起见缩写): $numberFormatter=\numberFormatter::create('en',\numberFormatter::CURRENCY); $formattedCost=$numberFormatter->FormattCurrency( 假,空 ); var_转储(格式化成本); 不过
$numberFormatter=\numberFormatter::create('en',\numberFormatter::CURRENCY);
$formattedCost=$numberFormatter->FormattCurrency(
假,空
);
var_转储(格式化成本);
不过,我们在新旧图像中获得了非常不同的输出
基于PHP:7.1.30-fpm-alpine3.10
bool(假)
基于PHP:7.2.22-fpm-alpine3.10
字符串(6)“0.00”
.
字符是unicode货币符号字符
我检查了一些PHP在线测试人员,似乎没有一个符合这种行为。在所有PHP版本上,预期的行为应该是返回false
我想知道这是否与Intl扩展/ICU的潜在差异有关。我们的7.1映像具有以下内容:
version => 1.1.0
ICU version => 59.1
ICU Data version => 59.1
而7.2版本有这些
version => 1.1.0
ICU version => 64.2
ICU Data version => 64.2
我不知道为什么相同的Alpine OS 3.10和相同的intl扩展版本(1.1.0)会安装完全不同的ICU版本。只需启动几个虚拟机。。。到目前为止,我已经在使用PHP7.2(ICU/data version 64.1)的Debian 9虚拟机上安装了
string(6)”·0.00“
。看起来绝对像是一个ICU版本而不是PHP版本,我有一个使用PHP7.1的Debian box,它也运行ICU64.1,这也得到了string(6)·0.00”
。。。从技术上讲,这几乎是假的,因为你可能会得到一个实际的货币字符串。。。但它不会被认为是假的。。。似乎与文档不匹配,是吗?。。。在PHP7.1和ICU/Data version 57.1的Windows框中,我收到了一条警告(NumberFormatter::formatCurrency():数字格式化失败)和bool(false)
-因此,在格式化之前对false
进行类型篡改的方式似乎发生了一些变化。。。。啊,不是类型杂耍,而是NULL
货币-在Windows框中将货币更改为EUR
,会产生string(7)“€*尼克斯很乐意使用·字符