我在WAMP服务器设置(PHP版本5.3.0,Apache 2.2.11)上遇到了一个奇怪的问题。当使用sprintf输出数字时,我偶尔会在输出字符串中得到错误的字符。
示例:(未修剪任何内容,这是脚本中唯一的代码)
$dt1 = new DateTime('now');
$dt2 = new DateTime('now - 10 min');
$interval = $dt1->diff($dt2);
$number = 10.0;
$string = sprintf("%.1f", $number);
echo "number: $number, string: $string\n";
如果我在PHP CLI的命令提示符下运行它,我会得到预期的输出:
数字:10,字符串:10.0
但是,如果我使用Apache服务它,在浏览器中我得到
数字:10,字符串:: .0
带冒号,其中'10'应该是。 (注意':'是'9'之后的顺序中的下一个ascii字符,如果$number
是0-9,一切正常。大于10的数字似乎使用ascii等价物 - 所以11是';',12是'<'等等。)
最奇怪的是,上面代码示例中的前四行似乎会影响结果。从逻辑上讲,这些陈述应该没有影响,但如果我将它们评论或删除它们,问题就会消失。
有什么想法吗?还有其他人能够复制这个吗?
注意:
答案 0 :(得分:0)
尝试在代码setlocale(LC_ALL, 'en_US');
答案 1 :(得分:0)
试试这个:
将echo "number: $number, string: $string\n";
更改为:
for ($i = 0, $n = strlen($string); $i < $n; $i++) {
echo ord($string[$i]).' ';
}
它基本上会为字符串中的每个字节提供数字字符代码。注意我说的字节。如果这是一个字符集问题,或Apache mangling字节的问题,你应该在这里看到。预期输出为:49 48 46 48
。如果您改为查看58 46 48
,那么您确实可能发现了php的错误并应提交错误报告。你也应该尝试升级你的php版本(5.3.2已经出来)......