简单的strpos()不使用“[”char,为什么?

时间:2012-11-03 20:30:15

标签: php strpos

为什么我这样做:

if(strpos("[","[rgeger]")){ 
echo 'hey'; 
}

它不打印任何东西?

尝试使用字符串:

function return_tags($keywords){
 if($keywords){
  $k_array = array();

  foreach($this->check($keywords) as $key=>$value){

    array_push($k_array, $value);
  }

  $last_array = array();
  foreach($k_array as $key=>$value){
    if(strpos("[", $value) && strpos("]", $value) && strlen($value) >= 2){
      $value = '<span class="tag">'.$value.'</span>';

    }
    array_push($last_array, trim($value));

  }
  return $last_array;

 }else{
  return false;
 }
}

字符串示例

  $keywords = "freignferi eiejrngirj erjgnrit [llll] [print me as tag]";

你看到在html中打印了任何<span>元素吗?

5 个答案:

答案 0 :(得分:5)

看起来你交换了参数:

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

因此,如果您想知道字符串[中是否有[rgeger]

if (strpos("[rgeger]", "[") !== false) { 
  echo 'hey'; 
}

(资料来源:http://php.net/strpos

答案 1 :(得分:3)

返回的位置为零索引,因此第一个字符位于位置0.当将0评估为布尔值时,它为假 - 因此它不会进入块。

修复此问题:

if (strpos('[rgeger]', '[') !== false)

同样参数是错误的方式。不要再投票了这篇文章;去upvote robbi而不是发现那个:)鹰眼robbi,EAGLE眼睛:P

答案 2 :(得分:2)

因为你必须检查strpos()的返回值,因为它可能为零因为[它在索引零处,而零计算为FALSE这就是为什么它不会输入你的if块,所以检查返回值是否为FALSE并输入boolean,而不仅仅是整数0,如下所示:

if(strpos("[rgeger]","[") !== false){ 
  echo 'hey'; 
}

<强>更新
参数的顺序也是错误的,主题字符串首先出现在搜索字符串中,我更新了上面的代码以反映出来。

答案 3 :(得分:1)

因为它错了。如果条件为假,Strpos会给出错误。

if(strpos("[rgeger]","[") !== false){ 
    echo 'hey'; 
}

编辑:我已经纠正了我的回答。您的参数顺序错误。其:

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

答案 4 :(得分:0)

因为实际的strpos可以返回0,请参阅doc

  

警告   此函数可能返回布尔值FALSE,但也可能返回非布尔值,其值为FALSE。有关更多信息,请阅读有关布尔值的部分。使用===运算符测试此函数的返回值。

所以你必须直接与false值进行比较。

if(strpos("[","[rgeger]") !== false){ 
  echo 'hey'; 
}

编辑::

小心..看一下参数命令

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

Haystack是字符串输入。 针是你正在寻找的。

if(strpos("[regeger]","[") !== false){ 
  echo 'hey'; 
}