阿拉伯字符串逐字截断

时间:2014-02-25 06:55:38

标签: 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 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);

但它不起作用, 所以请帮帮我

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

2 个答案:

答案 0 :(得分:0)

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

mb_substr($text,0,100,"UTF-8"); 

在您的代码中,此行将返回

$words = mb_split('[^\x{0600}-\x{06FF}]', $string);

您可以将Regexp更改为以下行但它将返回整个阿拉伯字符串而不是字符数组

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

答案 1 :(得分:0)

使用简单的

$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;
    }
};