如何修复此代码上的“ strpos():字符串中不包含偏移量”

时间:2019-07-19 09:59:17

标签: php

我的某些代码有时会抛出错误,并且找不到原因。 错误是strpos(): Offset not contained in string语句上的while

我知道此错误的含义,但我不知道为什么有时会出现此错误...

这是代码的一部分:

if(!empty($args['name'])){
  $p = 0;
  while(($p = strpos($args['name'],'&',$p)) !== false){
    if(substr($args['name'],$p,5) == '&'){
      $p += 5;
    }else{
      ++$p;
      $args['name'] = substr($args['name'],0,$p).'amp;'.substr($args['name'],$p);
      $p += 4;
    }
  }
}

我试图通过以下方式更改While语句:

while(strlen($args['name']) >= $p &&  ($p = strpos($args['name'],'&',$p)) !== false){

但这不能解决问题。

顺便说一下,这段代码来自一个wordpress插件,这是文档:

/** A workaround for seems to be an overlook in WordPress core.
* Dealing with '&' in term name.
* A term name containing '&' is stored in database with '&' instead of '&',
* but search in get_terms is done on raw '&' coming from $_POST variable.
*/

您有什么想法吗?为什么这段代码有时是错误的?

谢谢

已修复
我的变量是Array ...

2 个答案:

答案 0 :(得分:1)

请在您的while循环前检查$args['name']

使用if(isset($args['name']))添加if(!empty($args['name']))或更多内容

答案 1 :(得分:1)

此代码应该可以正常工作。还可以

在您的情况下,$p不能大于参数。

请确保您的参数$args['name']string。我敢肯定不是。
我敢打赌这是一个数组(is_array()

相关问题