为什么会出现未初始化的字符串错误,我无法弄清楚?
这是我的功能:
function show_site_name($url,$lenght)
{
$name='';
$i=0;
$slash=0;
while($slash<3 && $i<=$lenght)
{
if($url[$i]=='/') $slash++;
if($url[$i]!='/' && $slash==2) $name.=$url[$i];
$i++;
}
return($name);
}
编辑: 我在这两行收到“未初始化的字符串偏移”错误:
if($url[$i]=='/') $slash++;
if($url[$i]!='/' && $slash==2) $name.=$url[$i];
答案 0 :(得分:0)
该功能相当愚蠢。 PHP为parsing a url提供了不错的本机功能。另外,我假设“长度”是第一个参数的长度?当然可以使用strlen
得出。
show_site_name('http://www.example.com', strlen('http://www.example.com'));
将得到Uninitialized string offset: 22
。
show_site_name('http://www.example.com', strlen('http://www.example.com')-1);
以上可能是您想要的。选项从零开始,而不是一个。
if($url[$i]=='/') $slash++;
上面的行是您超出字符串偏移量的位置。逻辑不好。您可以修正代码,避免使用或使用isset
处理它。相信您的错误日志。
更新:
您可以通过传递如我所示的理智的参数来避免这种情况。或将其更改为:
if (isset($url[$i])) {
if($url[$i]=='/') $slash++;
} else {
return $name;
}
但是,那又太愚蠢了。
如果您坚持要这样做,我们称其为学习目的。为什么不这样做:
function show_site_name($url)
{
$lenght = strlen($url) -1;
...
传递仅可以从第一个参数派生的第二个参数不是一个好方法。