如何修复代码中的strpos(): Offset not contained in string错误
解决strpos(): Offset not contained in string偶发错误的方案
咱们先把问题的核心说透——你已经找到根源了:$args['name']偶尔会是数组类型,这就是那个偶发错误的罪魁祸首。
为什么数组类型会触发这个错误?
当$args['name']是数组时:
strpos()接收的第一个参数不是字符串,PHP宽松模式下不会直接抛出类型错误,但它的返回值逻辑会完全混乱(比如返回false或者非预期的数值)。- 后续的
substr()、strlen()等字符串操作在处理数组时,会出现各种异常:比如strlen($array)会返回1,而$p在循环中会被赋值为无效值,最终导致偏移量$p超出实际可操作的范围,触发Offset not contained in string错误。 - 你之前尝试的
strlen($args['name']) >= $p判断之所以无效,就是因为数组的strlen结果不符合预期,根本起不到校验作用。
修正后的代码
只需要在原有判断中增加字符串类型校验,确保只有当$args['name']是字符串时才执行后续逻辑:
if(!empty($args['name']) && is_string($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; } } }
额外建议
在WordPress开发中,处理来自核心、用户或第三方的参数时,一定要先做类型校验和过滤。像$args这类参数,可能会被不同的钩子、插件修改,类型不稳定的情况很常见,提前做校验能避免很多偶发性的奇怪错误。
内容的提问来源于stack exchange,提问作者user3013440
相关产品推荐
相关产品推荐

