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

PHP实现自定义替换字母表时ç字符触发数组键未定义报错求助

报错原因
  • 核心问题是PHP原生的str_split()函数仅支持按单字节切割字符串,而ç是UTF-8编码下的多字节字符,占用2个字节,使用str_split()拆分后会被切成两个无效的乱码字节,这两个乱码在你的映射表中不存在对应键,所以抛出未定义数组键的警告。
  • 次要排查点:你的PHP源文件本身需要保存为UTF-8 无BOM格式,否则写在映射数组里的ç本身就是乱码,无法和输入的正常ç匹配。
修复步骤
  1. 替换多字节字符拆分逻辑,改用PHP多字节扩展的拆分方法,兼容特殊字符。
  2. 增加映射表键存在判断,避免后续输入未定义字符时再抛出警告。
  3. 在form标签上增加accept-charset="utf-8"属性,强制浏览器提交UTF-8编码的内容,避免编码异常。
修改后的代码示例

1. 更新form标签

将原有form标签替换为:

<form method="post" role="form" class="php-email-form" accept-charset="UTF-8">

2. 替换translate函数代码

Function translate($string) {
    $alfabeto = array(
        "a"=>"_","A"=>"_",
        "b"=>"8","B"=>"8",
        "c"=>"!","C"=>"!",
        "d"=>"5","D"=>"5",
        "e"=>"=","E"=>"=",
        "f"=>"(","F"=>"(",
        "g"=>"$","G"=>"$",
        "h"=>"9","H"=>"9",
        "i"=>'"',"I"=>'"',
        "j"=>"1","J"=>"1",
        "k"=>"+","K"=>"+",
        "l"=>"@","L"=>"@",
        "m"=>"2","M"=>"2",
        "n"=>":","N"=>":",
        "o"=>"7","O"=>"7",
        "p"=>"<","P"=>"<",
        "q"=>")","Q"=>")",
        "r"=>"4","R"=>"4",
        "s"=>"/","S"=>"/",
        "t"=>"*","T"=>"*",
        "u"=>"0","U"=>"0",
        "v"=>">","V"=>">",
        "w"=>";","W"=>";",
        "x"=>"3","X"=>"3",
        "y"=>"&","Y"=>"&",
        "z"=>"6","Z"=>"6",
        " "=>" ",
        "?"=>"?",
        "."=>".",
        ","=>",",
        "-"=>"-",
        "ç"=>"{",
        "Ç"=>"{" // 如需支持大写Ç可保留该行
    );
    $saida = array();
    // 替换str_split为兼容多字节的拆分逻辑
    $length = mb_strlen($string, 'UTF-8');
    $entrada = [];
    for ($i = 0; $i < $length; $i++) {
        $entrada[] = mb_substr($string, $i, 1, 'UTF-8');
    }
    foreach ($entrada as $value) {
        // 先判断映射是否存在,避免未定义字符报错
        $saida[] = isset($alfabeto[$value]) ? $alfabeto[$value] : $value;
    }
    return implode('', $saida);
}

Xampp环境默认已开启mbstring扩展,无需额外配置即可正常运行上述代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 22:48:00