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

PHP 8.1兼容问题:strlen()传null弃用警告及代码修改咨询

解决PHP 8.1中strlen()的弃用警告问题

问题原因

PHP 8.1开始严格禁止向strlen()传递null参数,当你的$strRawText为null时就会触发该警告。同时原代码在参数类型约束、代码效率上也有优化空间。

修改方案

以下是兼容PHP 8.1的优化版本代码,关键改动说明:

  • 给参数添加类型声明,明确参数类型,从源头避免非法值传入
  • 自动将$strRawText的null值转为空字符串
  • 优化字符串拼接方式(使用.=替代$a = $a . $b)
  • 修正elseIf为PHP规范的elseif
  • 用foreach遍历字符替代手动while循环,代码更简洁易读
private function cleanInput2(?string $strRawText, string $strAllowableChars, bool $blnAllowAccentedChars): string
{
    // 处理null输入,转为空字符串
    $strRawText = $strRawText ?? '';
    $strCleanedText = "";

    // 遍历每个字符
    foreach (str_split($strRawText) as $chrThisChar) {
        // 保留允许的字符
        if (strpos($strAllowableChars, $chrThisChar) !== false) {
            $strCleanedText .= $chrThisChar;
        } elseif ($blnAllowAccentedChars) {
            // 保留重音字符及高位ASCII字符
            if (ord($chrThisChar) >= 191) {
                $strCleanedText .= $chrThisChar;
            }
        }
    }

    return $strCleanedText;
}

替代方案(保留原循环逻辑)

如果希望保留原有的while循环结构,只需在循环前添加null处理即可:

private function cleanInput2($strRawText, $strAllowableChars, $blnAllowAccentedChars)
{
    $iCharPos = 0;
    $chrThisChar = "";
    $strCleanedText = "";

    // 关键:将null转为空字符串,避免strlen()报错
    $strRawText = is_null($strRawText) ? '' : $strRawText;

    //Compare each character based on list of acceptable characters
    while ($iCharPos < strlen($strRawText))
    {
        $chrThisChar = substr($strRawText, $iCharPos, 1);
        if (strpos($strAllowableChars, $chrThisChar) !== FALSE)
        {
            $strCleanedText .= $chrThisChar;
        }
        elseif ($blnAllowAccentedChars == TRUE)
        {
            if (ord($chrThisChar) >= 191)
            {
                $strCleanedText .= $chrThisChar;
            }
        }

        $iCharPos++;
    }

    return $strCleanedText;
}

额外说明

  • 添加参数类型声明(如?string表示可空字符串,string表示必填字符串)能让代码更健壮,提前发现错误
  • 使用??空合并运算符是PHP 7+的语法,比is_null()更简洁
  • 字符串拼接用.=比每次重新赋值更高效,尤其适合处理长文本场景

内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:50:32