You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复代码中的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:07:08