Php 按单词截断的阿拉伯文字符串

Php 按单词截断的阿拉伯文字符串,php,arabic,Php,Arabic,要按单词截断阿拉伯字符串吗 我试过了 function mb_str_word_count($string, $format = 0, $charlist = '[]') { mb_internal_encoding( 'UTF-8'); mb_regex_encoding( 'UTF-8'); $words = mb_split('[^\x{0600}-\x{06FF}]', $string); switch ($format) { case

要按单词截断阿拉伯字符串吗

我试过了

function mb_str_word_count($string, $format = 0, $charlist = '[]') {
    mb_internal_encoding( 'UTF-8');
    mb_regex_encoding( 'UTF-8');

    $words = mb_split('[^\x{0600}-\x{06FF}]', $string);
    switch ($format) {
        case 0:
            return count($words);
            break;
        case 1:
        case 2:
            return $words;
            break;
        default:
            return $words;
            break;
    }
};
function limit_text($text, $limit) {
    //echo str_word_count($text, 0);//exit;
    if (mb_str_word_count($text, 0) > $limit) {
        $words = mb_str_word_count($text, 2);
        $pos = array_keys($words);
        $text = substr($text, 0, $pos[$limit]);
    }
    return $text;
}
$text='
الوقائع
ــــ أسندت النيابة العامة إلى المتهم مسلم محمد البراك أنه في تاريخ 15/10/2012 بدائرة مباحث أمن الدولة:
"طعن علنا وفي مكان عام عن طريق القول في حقوق الأمير وسلطته وعاب في ذاته وتطاول على مسند الإمارة بأن وجه له خلال ندوة عامة العبارات والألفاظ المبينة بالأوراق وذلك على النحو المبين بالتحقيقات".
ــــ وخلصت النيابة العامة إلى أن المتهم "قد ارتكب الجناية المؤثمة بالمادة (25) من القانون رقم (31) لسنة 1970 بتعديل بعض أحكام قانون الجزاء"، وطلبت النيابة العامة من محكمة الجنايات معاقبة المتهم طبقا لمادة الاتهام، وأرفقت بتقرير الاتهام ما وصفته بقائمة "بأدلة الثبوت".
ــــ وفي تحقيقات النيابة العامة، أنكر المتهم جميع الاتهامات المسندة إليه، كما أنكرها أمام المحكمة الموقرة، وقد أوضح أمام النيابة العامة إن ما قاله إنما كان نصحا ولم يكن قصده الإساءة إلى الأمير.
ــــ كما طلب المتهم أمام النيابة العامة سماع شهادة كل من: رئيس مجلس الوزراء الشيخ جابر المبارك الحمد الصباح، والسيد أنس الصالح وزير التجارة والصناعة، والسيد خالد سلطان بن عيسى نائب رئيس مجلس الأمة السابق، والسيد وليد الجري، والسيد جمعان الحربش، والسيد أحمد الديين.
ــــ وبتاريخ 15/4/2013، أصدرت محكمة أول درجة حكمها المطعون عليه، والذي قضت فيه بحبس المتهم خمس سنوات مع الشغل والنفاذ.
ــــ وفور صدور الحكم، طعن المتهم عليه بطريق الاستئناف. وفي أول جلسة أمام محكمة الاستئناف بتاريخ 29/4/2013، قررت المحكمة وقف تنفيذ الحكم المطعون عليه لحين الفصل في الاستئناف، وقررت تأجيل نظر الدعوى لجلسة 13/5/2013 بناء على طلب الدفاع للاطلاع والاستعداد.';
echo limit_text($text,100);
但它不起作用, 所以请帮帮我


也需要支持英文文本的逻辑

您不需要所有这些代码来截断字符串,您可以使用类似这样的代码

mb_substr($text,0,100,"UTF-8"); 
在您的代码中,此行将不返回任何内容

$words = mb_split('[^\x{0600}-\x{06FF}]', $string);
您可以将Regexp更改为以下行,但它将返回整个阿拉伯字符串,而不是字符数组

mb_split("/([\x{0621}-\x{064A}])/u", $string)

它的工作原理很简单

$words = mb_split('\s', $string);
整体功能:

function mb_str_word_count($string, $format = 0, $charlist = '[]') {
    $string=  trim($string);
    $words = mb_split('\s', $string);
    switch ($format) {
        case 0:
            return count($words);
            break;
        case 1:
        case 2:
            return $words;
            break;
        default:
            return $words;
            break;
    }
};

不要忘记将文件保存为不带BOM的UTF-8。此外,您的页面还需要在html标题中使用UTF-8元标记。存在,但“别忘了将文件保存为不带BOM的UTF-8”意味着?您可以使用不同的编码保存文件,ANSI、UTF-8和UTF-8不带BOM。不带BOM的UTF-8是PHP中使用的标准编码。由于您在文件中硬编码了阿拉伯语字符,因此将根据系统语言设置读取字符串。因此,如果您的Web服务器不是没有BOM的UTF-8,则可能不是阿拉伯语的Web服务器将无法读取它。Notepad++可以更改编码。Windows的编辑器记事本也有,它被称为Unicode。但是如何组合显示呢?你可以使用echo mb_substr($text,0100,“UTF-8”);为了显示部分文本,我不太理解你在评论中的问题。它不适用于英文文本,我尝试了字符串“测试文章描述”,但没有得到任何结果,她的$word数组:array(25){[0]=>string(0)”“[1]=>string(0)”“[2]=>string(0)”“[3]=>string(0)”“[4]=>string(0)”[5]=>string(0)”“[6]=>string(0)”[7]=>字符串(0)“[8]=>字符串(0)”“[9]=>字符串(0)”“[10]=>字符串(0)”“[11]=>字符串(0)”“[12]=>字符串(0)”“[13]=>字符串(0)”“[14]=>字符串(0)”“[15]=>字符串(0)”“[16]=>字符串(0)”[17]=>字符串(0)”[18]=>字符串(0)”“[19]=>字符串(0)”[20]=>字符串(0)”“[21]=>字符串(0)”[22]>。。。