奇怪的字符串没有正确注册

时间:2012-02-15 07:37:13

标签: php arrays string

所以我已经制作了一个时钟到秒的功能,并且在运行它的时候它运行正常,带有测试字符串......比如12:53:13 PM。

但是当我把它放在另一个脚本中时(通过require或者只是复制粘贴)我发现了一个问题,我不确定它是否特别是由于该功能,但这只是奇怪。字符串

“PM”正在注册为6个字符而不是2个字符,就像var_dump所说的那样。有什么想法吗?

我通过爆炸整个日期的字符串来获得时间。这实际上是代码

$time = explode(" ",$dateallstr);
$time = array($time[5],$time[6]);
$time = implode(" ",$time);

var_dump($time);
//require("timeinsecs.php");

这就是var_dump返回的内容

array(4) { [0]=> string(2) "11" [1]=> string(2) "14" [2]=> string(2) "55" [3]=> string(6) "PM" }

这是起始字符串。

DATEALLSTR: string(45) "Tuesday 14th of February 2012 11:14:55 PM"

请帮助,我不知道为什么会这样做。

编辑:

好的,拿到了bin2hex。我不确定这件事是否仅仅是bin2hex。

BIN2HEX504d3c2f693estring(6)“PM”

2 个答案:

答案 0 :(得分:3)

查看bin2hex()函数的输出,我注意到序列3c 2f 69 3e。这是什么意思?答案是:

</i>

查看来源var_dump()的输出。它应该说:

array(4) {
[0]=> string(2) "11"
[1]=> string(2) "14"
[2]=> string(2) "55"
[3]=> string(6) "PM</i>"
}

浏览器将</i>解析为HTML标记,不会显示它!

答案 1 :(得分:2)

原始字符串的长度为41.看起来你的输入在文本后面有4个NUL字符,这些字符没有打印但是按照长度计算:

var_dump("Tuesday 14th of February 2012 11:14:55 PM");
 => string(41) "Tuesday 14th of February 2012 11:14:55 PM"

var_dump("Tuesday 14th of February 2012 11:14:55 PM\0\0\0\0");
 => string(45) "Tuesday 14th of February 2012 11:14:55 PM"

你可以在trim()之前尝试explode()输入,这应该摆脱额外的字符:

$time = explode(" ", trim($dateallstr));

编辑:您已跳过PHP故障排除的第一步:查看源代码以查看Web浏览器未显示的内容。现在您已经发布了十六进制转储,我们看到最后一个字符串实际上是"PM</i>"