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

使用mb_split拆分阿拉伯语时出现异常字符问题求助

阿拉伯语文本拆分后取首字符出现乱码的解决办法

你的问题出在两个核心点:

  1. 单字节方式截取多字节字符:阿拉伯语是UTF-8多字节编码,$words[$i][0]会按单字节截断字符,导致原本完整的阿拉伯语字符被拆分成乱码片段。
  2. 未处理冗余空白:原字符串包含换行、多连续空格,mb_split("\s")会拆分出空元素,后续取首字符时也会产生无效内容。

修复后的代码

<?php
mb_internal_encoding("UTF-8");
function fatehah(){
    $surah = "
بِسْمِ ٱللَّهِ ٱلرَّحْمَـٰنِ ٱلرَّحِيمِ ١ٱلْحَمْدُ لِلَّهِ رَبِّ ٱلْعَـٰلَمِينَ ٢ٱلرَّحْمَـٰنِ ٱلرَّحِيمِ ٣مَـٰلِكِ يَوْمِ ٱلدِّينِ ٤إِيَّاكَ نَعْبُدُ وَإِيَّاكَ نَسْتَعِينُ ٥ٱهْدِنَا ٱلصِّرَٰطَ ٱلْمُسْتَقِيمَ ٦صِرَٰطَ ٱلَّذِينَ أَنْعَمْتَ عَلَيْهِمْ غَيْرِ ٱلْمَغْضُوبِ عَلَيْهِمْ وَلَا ٱلضَّآلِّينَ   ٧
    ";
    // 清理所有冗余空白:替换多空白为单空格,再去除首尾空白
    $cleaned_surah = preg_replace('/\s+/u', ' ', trim($surah));
    // 按Unicode空格拆分字符串,确保兼容多字节文本
    $words = preg_split('/\s/u', $cleaned_surah);
    
    $word = [];
    foreach($words as $w){
        // 用多字节函数取首字符,避免截断
        if(!empty($w)){
            $word[] = mb_substr($w, 0, 1, "UTF-8");
        }
    }
    return $word;
}
$selwords = fatehah();
var_dump($selwords);
?>

关键修改说明

  • 空白清理:preg_replace('/\s+/u', ' ', trim($surah))统一处理所有Unicode空白类型,避免拆分出空元素。
  • 正确拆分:preg_split加u修饰符,确保按Unicode标准拆分多字节文本,而非单字节。
  • 多字节取首字符:用mb_substr替代直接下标访问,保证完整截取阿拉伯语的单个字符,不会出现乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:46:01