php4、php5版本while语句处理字符串’0’时的差异

php版本while语句处理字符串’0’时的差异

最新碰到一个诡异问题,某些主机上的php4会把字符串’xkai200’处理成’xkai20’,但是在我的php5上显示正常。怀疑是php4和5两个版本在substr或strlen函数处理上的差异,但是仔细翻阅手册并没有发现两个版本的差别。于是怀疑while语句:

< ?php $str = 'xkai200'; //$str = 'xkai20a'; convert($str); function convert($str) { while($str) { $i++; $str = substr($str, 1, strlen($str)); echo "<li>$str \t $i</li>\n"; } } echo PHP_VERSION; ?>

将’xkai20a’代替’xkai200’,发现原来while条件中如果是字符串’0’,会被当成false对待!

php4.4.2, php4.4.7上发现此问题,php5.5.2则正常。

解决方法:使用while($str != ”) 代替 while($str)。

发表评论