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

使用str_split处理特殊字符出现Undefined offset错误及乱码问题

问题原因

  • 「Undefined offset」报错:PHP数组为0起始索引,你当前rand(1, sizeof($arr))的取值范围包含了等于数组长度的数值,超出了最大合法索引(数组长度-1),因此访问了不存在的数组下标。
  • 乱码问题:确实和UTF-8编码相关。str_split()默认按单字节切割字符串,你用到的希腊字母、版权符号等都是多字节UTF-8字符,切割后单字节无法组成完整字符,就会出现�乱码。

修复方案

先确认你的PHP源码使用UTF-8无BOM格式保存,再将代码修改为如下版本:

function ornamento() {
  // 改用多字节拆分函数,保证单个字符完整
  $izq = mb_str_split("[{(]})");
  $der = mb_str_split("]})[{(");
  $med = mb_str_split("+÷×=#®©$%&?¿");
  $cen = mb_str_split("ΔΘЖΣΤΥΦΧΨΩ");
  
  // 调整随机下标范围,匹配0起始的数组索引规则
  $idx1 = rand(0, count($izq) - 1);
  $idx2 = rand(0, count($izq) - 1);
  $mix1 = rand(0, count($med) - 1);
  $mix2 = rand(0, count($med) - 1);
  $cix  = rand(0, count($cen) - 1);
  
  $ornamento = $izq[$idx1] . $izq[$idx2] . $med[$mix1] . $med[$mix2] .  $cen[$cix] . $med[$mix2] .  $med[$mix1] . $der[$idx2] . $der[$idx1];
  echo $ornamento;
}

如果你的PHP版本低于7.4(mb_str_split为7.4新增函数),可以新增自定义多字节拆分函数替代:

function custom_mb_str_split($string, $length = 1) {
    $result = [];
    $str_len = mb_strlen($string);
    for ($i = 0; $i < $str_len; $i += $length) {
        $result[] = mb_substr($string, $i, $length);
    }
    return $result;
}

使用时把代码里的mb_str_split替换为custom_mb_str_split即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:42:03