النتائج 1 إلى 10 من 10

الموضوع: دالة اقتطاع النصوص

  1. #1
    عضو نشيط جدا
    تاريخ التسجيل
    Apr 2008
    المشاركات
    361

    دالة اقتطاع النصوص



    السلام عليكم،

    لقد طورت هذه الدالة ولكنها لا تعمل بكفاءة الا مع النص اللاتيني وعكس ذلك مع النص العربي :


    كود PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-Transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
     
    <head>
        <meta http-equiv="content-type" content="text/html;  charset=utf-8" />
        <title>منطقة الادارة</title>
        <link rel="stylesheet" href="css/admincp.css" type="text/css"  />
    </head>
     
    <body>
     
    <?php
        $strg 
    "";
        
    $txt "السلام عليكم";
        
    //$txt = "Welcome Abo Mohammed";
        
    $lg_max 10//عدد الحروف المطلوبة
     
        
    if (strlen($txt) > $lg_max)
        {
        
    $strg mb_substr($txt0$lg_max"UTF-8");  echo "strg =  ".$strg."<br />";
        
    $last_space strrpos($strg" ");  echo "last_space =  ".$last_space."<br />";
        if (
    $last_space !=0){$strg mb_substr($strg0,  $last_space,"UTF-8")."...";}
        }
        echo 
    $strg;
    ?>
    </body>
    </html>
    لماذا هذا الفرق في النتيجة ؟

    شكراً.





    التعديل الأخير تم بواسطة apitos ; 24-05-2010 الساعة 08:43 PM
    __________________
    مجلتي الصغيرة


  2. #2


    الدالة تعمل جيدا أخي الكريم
    فدوال MB قامت بحل مشاكل كثيرة
    كود PHP:
        $txt "ابجدهوزحطيكلمن";
        
    //$txt = "abcdefghijklmnop";
        
    $lg_max 8;
        echo 
    mb_substr($txt0$lg_max"UTF-8"); 
    يمكنك أيضا إستخدامها بهذه الطريقة :
    كود PHP:
        $txt "ابجدهوزحطيكلمن";
        
    //$txt = "abcdefghijklmnop";
        
    $lg_max 8;
        
    mb_internal_encoding("UTF-8");
        echo 
    mb_substr($txt0$lg_max); 
    في حال لم تكن مكتبة MB مثبتة على السيرفر فيمكنك إستخدام هذه الدالة للتقطيع :
    كود PHP:
    function MY_MB_substr($data,$from,$to){
        return 
    preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'$from .'}'.'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'$to .'}).*#s','$1'$data);
    }
    $txt "ابجدهوزحطيكلمن";
    //$txt = "abcdefghijklmnop";
    $lg_max 8;
    echo 
    MY_MB_substr($txt,'0',$lg_max); 
    بالتوفيق .






  3. #3


    الدالة الأخيرة تفيد في تقطيع النص دون ظهور أي رمز في آخر النس ، مثل رمز مربع أو علامة إستفهام ، لأنها تقطع النص كليا ، و مثلها أيضا دالة mb_substr

    أما الدالة
    substr فهي تحدث المشاكل مع العربية و كثير من اللغات مثل الصينية و غيرهما ...






  4. #4
    عضو نشيط جدا
    تاريخ التسجيل
    Apr 2008
    المشاركات
    361


    اهلا بك اخي rifizm.

    الدالة تعمل جيدا أخي الكريم
    هي تعمل مع النص اللاتيني فقط.

    بالنسبة للنص العربي تعطيني الناتج :

    السلام علي ...
    بدل :

    السلام ...
    كما ان طول النص هو 12 حرفا ولكن عند طباعته اجد 23 حرفا.

    هذا كان قصدي.

    شكراً.





    __________________
    مجلتي الصغيرة

  5. #5


    تقصد تقطيع النصوص حسب الكلمات !!
    يمكنك المرور من هنا :
    http://www.swalif.net/softs/swalif45/softs280000/

    بالتوفيق .






  6. #6
    عضو نشيط
    تاريخ التسجيل
    Apr 2010
    المشاركات
    34


    المرجوا ابداء الراي حول هده الدالة
    كود PHP:
    <?php
    $str 
    "ابجدهوزحطيكلمن";

    function 
    _wordwrap($str$num 50$url "",$title "")
    {
        
    $count str_word_count($str);
        if (
    $num <= $count && $num !== 0) {
            
    $arr explode(" ",$str,(++$num));
            
    array_pop($arr);
            
    $str implode(" ",$arr);
            return 
    $link $str ." <a style='text-decoration:none; font-size:13px;' href='$url' title='$title'> ... Lire la suite ... </a>";
        }else {
            return 
    $link $str ." <a style='text-decoration:none; font-size:13px;' href='$url' title='$title'> ... Lire la suite ... </a>";
        }
    }
            echo 
    _wordwrap($str22,"?page=accueil","Lire la suit");
    ?>







  7. #7
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512


    ما فهمته من الكود الذي تفضلت بوضعه هو أنك تريد قطع الكلام بناء على عدد معين من الحروف

    ثم حذف آخر كلمة اذا كانت غير مكتملة الحروف

    ممكن تجرب هذا

    كود PHP:
    $text 'السلام عليكم ورحمة الله وبركاته';
    $len  30;

    preg_match("/(.{1,$len})([^[:space:]]*)/su",trim($text),$m);
    if(
    preg_match("/[[:space:]]/su",$text) && isset($m[2])){
        
    preg_match("/(.*)[[:space:]][^[:space:]]+$/su",$m[1],$m);
    }
    $text $m[1]; 






    التعديل الأخير تم بواسطة mr_m ; 25-05-2010 الساعة 08:25 AM
    __________________
    محمد حمود.

  8. #8
    عضو نشيط جدا
    تاريخ التسجيل
    Apr 2008
    المشاركات
    361


    المرجوا ابداء الراي حول هده الدالة
    جميلة جدا ... تحكم رائع في عدد الكلمات.

    ما فهمته من الكود الذي تفضلت بوضعه هو أنك تريد قطع الكلام بناء على عدد معين من الحروف

    ثم حذف آخر كلمة اذا كانت غير مكتملة الحروف
    نعم هو كذلك.

    ولكن لم افهم جيدا عمل preg_match ..





    __________________
    مجلتي الصغيرة

  9. #9
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512


    أهلا بك عزيزي

    أولا عندنا
    كود PHP:
    [[:space:]] 
    و تمثل أي مسافة أو تاب t\ أو سطر جديد باليونيكود
    كود PHP:
    [^[:space:]] 
    عكسها يعني كل ما هو ليس مسافة أو تاب أو سطر جديد

    ثم
    كود PHP:
    preg_match("/(.{1,$len})([^[:space:]]*)/su",trim($text),$m); 
    - استخدمنا trim لحذف أي مسافات أو تاب أو سطر جديد موجودين في أول و آخر النص text ﻷنها ستعيق عملنا فيما بعد
    - preg_match ترجع النص بعدد الحروف التي نريدها، أيضا مع احتمال أن هناك كلمة في آخر النص تم شطرها.
    - أيضا تبحث عن أية حروف أو رموز ملاصقة للنص الذي تم ارجاعه ﻷنها تعتبره بقية الكلمة الغير مكتملة.

    كود PHP:
    if(preg_match("/[[:space:]]/su",$text) && isset($m[2])) 
    - تأكدنا من احتواء النص على كلمات منفصلة و أنه ليس عبارة عن كلمة واحدة
    - تأكدنا من وجود حروف من الكلمة التي تم قطعها.

    كود PHP:
    preg_match("/(.*)[[:space:]][^[:space:]]+$/su",$m[1],$m); 
    - بعد التأكد من وجود الكلمة الغير مكتملة قمنا بحذف آخر مسافة في النص بالاضافة للحروف الغير مرغوب فيها.

    كود PHP:
    $text $m[1]; 
    سواء كانت هناك كلمة غير مكتملة أو لا يوجد فالنص يكون موجود في m 1





    __________________
    محمد حمود.

  10. #10
    عضو نشيط جدا
    تاريخ التسجيل
    Apr 2008
    المشاركات
    361


    بارك الله فيك أخي mr_m.

    وعذرا على التاخر في الرد.





    __________________
    مجلتي الصغيرة





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض