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

PHP字母转数字处理阿拉伯语等非英文字符失效问题咨询

故障原因

原有代码仅能正常处理单字节编码的英文字符:

  • PHP原生strlen()是按字节统计字符串长度,$input[$i]的字符串偏移取值也是按字节定位
  • 阿拉伯语、乌尔都语等非英文字符在UTF-8编码下属于多字节字符,单个字母通常占2~3个字节,原有循环逻辑会把一个完整字母拆成多个无意义的字节碎片,既匹配不上映射规则,也会输出乱码。
修复方法

使用PHP的mbstring多字节字符串扩展提供的函数替换原生字节操作函数,按「字符」而非「字节」处理字符串即可,修复后完全兼容原有英文转换逻辑,不需要修改已写好的英文字母映射配置。

修复后的完整代码:

// 全局设置内部编码为UTF-8,避免编码识别偏差
mb_internal_encoding("UTF-8");

$input = "ب";
 
$remap = [
    "ا" => '200',
    "ب" => '300',
    "ج" => '50',
    "د" => '100',
];
 
$array = [];
// 按字符数统计输入长度,替代原有的字节长度计算
for ($i = 0; $i < mb_strlen($input); $i++) {
    // 按字符偏移截取单个完整字符,替代原有的字节偏移取值
    $c = mb_substr($input, $i, 1);
    $array[] = $remap[$c];
}
$star = "(" . implode(',', $array) . ")";
echo $star;

注意事项

  • 请确保运行环境已开启mbstring扩展,绝大多数默认安装的PHP环境都默认开启该扩展
  • 所有代码文件保存时请选择UTF-8 无BOM编码格式,否则字符本身存储就会异常,无法正常匹配映射规则
  • 乌尔都语、中文等其他非英文的多字节字符映射,都可以用同样的逻辑实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:54:23