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

الموضوع: هل من بديل لأمر substr

  1. #1
    عضو نشيط
    تاريخ التسجيل
    Jan 2005
    المشاركات
    89

    هل من بديل لأمر substr



    السلام عليكم
    احاول استخدام امر substr لعرض مقدمة صغيرة من المقال , و ليس كامل المقال
    كود PHP:
    echo  $row->textsubstr($row->text0300
    لكن للاسف فان هذا الامر لا يميز بين الاحرف العادية و بين احرف البرمجة التي تكون في محتوى المقال
    و بالتالي لا يكون العد سليما اضافة الى ظهور بعض الاكواد في النص.

    فهل من طريقة او امر برمجي يجعل العدد يشمل الاحرف المقروءة فقط ؟؟؟







  2. #2
    عضو نشيط
    تاريخ التسجيل
    May 2006
    المشاركات
    78


    وعليكم السلام

    كود PHP:
    <?php

    $search 
    = array('@<script[^>]*?>.*?</script>@si',
                       
    '@<style[^>]*?>.*?</style>@siU',
                       
    '@<[\/\!]*?[^<>]*?>@si',
                       
    '@<![\s\S]*?--[ \t\n\r]*>@'
    );

    $row->text preg_replace($search''$row->text);

    echo  
    $row->text substr($row->text0300);

    ?>







  3. #3
    عضو نشيط جدا
    تاريخ التسجيل
    May 2007
    المشاركات
    509


    اخوي تفضل هالدالة تعطيك مختصر عن المقال حسب الكلمات وليس الحروف يعني بتقدر تختار انو تظهر مثلا 20 كلمة فقط من المقال وستظهر كمختصر .

    كود PHP:
    function ltext($string,$num){ 
    $explode split(' ',$string);
    for (
    $i=0;$i<$num;$i++){
    $word .= $explode[$i].' ';
    }
    return 
    $word;

    $text "نص المقال كامل";
    $wordsnum 20// عدد الكلمات المراد اظهارها كمختصر

    ltext($text,$wordsnum); // استدعاء الدالة 

    الى الامام





    __________________
    EbNCaNa اخوكم ابن قانا

    [درس] قائمة بريدية بأسهل الطرق بواسطة PHP

    [توقيعك يجب أن لا يكون أطول من 400 حرف يتضمن تجاوز كود المنتدى] - الى متى المعاناة يا حضرة الأدارة ؟

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


    هذة الدالة استخدمت كاضافة لقالب سمارتي , بحيث تقوم بقص النص مع المحافظة على وسوم الــ HTML واغلاقها ...
    كود PHP:

    function smarty_modifier_html_substr($string$length$addstring="")

    {

        
    $addstring " " $addstring;

     

        if (
    strlen($string) > $length) {

            if( !empty( 
    $string ) && $length>) {

                
    $isText true;

                
    $ret "";

                
    $i 0;

     

                
    $currentChar "";

                
    $lastSpacePosition = -1;

                
    $lastChar "";

     

                
    $tagsArray = array();

                
    $currentTag "";

                
    $tagLevel 0;

     

                
    $noTagLength strlenstrip_tags$string ) );

     

                
    // Parser loop

                
    for( $j=0$j<strlen$string ); $j++ ) {

     

                    
    $currentChar substr$string$j);

                    
    $ret .= $currentChar;

     

                    
    // Lesser than event

                    
    if( $currentChar == "<"$isText false;

     

                    
    // Character handler

                    
    if( $isText ) {

     

                        
    // Memorize last space position

                        
    if( $currentChar == " " ) { $lastSpacePosition $j; }

                        else { 
    $lastChar $currentChar; }

     

                        
    $i++;

                    } else {

                        
    $currentTag .= $currentChar;

                    }

     

                    
    // Greater than event

                    
    if( $currentChar == ">" ) {

                        
    $isText true;

     

                        
    // Opening tag handler

                        
    if( ( strpos$currentTag"<" ) !== FALSE ) &&

                        ( 
    strpos$currentTag"/>" ) === FALSE ) &&

                        ( 
    strpos$currentTag"</") === FALSE ) ) {

     

                            
    // Tag has attribute(s)

                            
    if( strpos$currentTag" " ) !== FALSE ) {

                                
    $currentTag substr$currentTag1strpos$currentTag" " ) - );

                            } else {

                                
    // Tag doesn't have attribute(s)

                                
    $currentTag substr$currentTag1, -);

                            }

     

                            
    array_push$tagsArray$currentTag );

     

                        } else if( 
    strpos$currentTag"</" ) !== FALSE ) {

                            
    array_pop$tagsArray );

                        }

     

                        
    $currentTag "";

                    }

     

                    if( 
    $i >= $length) {

                        break;

                    }

                }

     

                
    // Cut HTML string at last space position

                
    if( $length $noTagLength ) {

                    if( 
    $lastSpacePosition != -) {

                        
    $ret substr$string0$lastSpacePosition );

                    } else {

                        
    $ret substr$string$j );

                    }

                }

     

                
    // Close broken XHTML elements

                
    while( sizeof$tagsArray ) != ) {

                    
    $aTag array_pop$tagsArray );

                    
    // only add string if text was cut

                    
    if ( strlen($string) > $length ) {

                        
    $ret.=$addstring;

                    }

                    
    $ret .= "</" $aTag ">\n";

                }

     

            } else {

                
    $ret "";

            }

            return ( 
    $ret );

        }

        else {

            return ( 
    $string );

        }









  5. #5
    عضو نشيط
    تاريخ التسجيل
    Jan 2005
    المشاركات
    89


    شكرا لك اخي الكريم
    الحل كان ناجعا جدا لكن مع بقاء رمز بسيط لا اعرف سببه يختلف شكلة بين الفيرفوكس و الاكسبلورر
    كما في الصورة
    فهل من حل لازالته ؟؟؟؟؟
    الاســـم:	reoor.jpg
المشاهدات: 106
الحجـــم:	6.5 كيلوبايت

    شكرا بكل الاحوال






  6. #6
    عضو شرف
    تاريخ التسجيل
    May 2007
    المشاركات
    1,647


    إذا كان ترميز البيانات utf-8 قم باستخدام دالة mb_substr بدلاً من substr ...

    كود PHP:
    mb_substr($str'utf-8'); 
    PHP: mb_substr - Manual

    تحياتي، أشرف السمهوري





    __________________
    # اتبعني على Twitter
    # عِرفان ساهم ببناء المحتوى العربي العلمي على الإنترنت!

  7. #7
    عضو نشيط جدا
    تاريخ التسجيل
    May 2007
    المشاركات
    509


    اخوي ما بعرف اذا ردك الي ولا للاخ 7ota لكن بكل الاحوال اذا استعملت دالتي فانا لما اجربها باكسبلورر 6 واصلن خلص تاريخو لازم تنتقل للاصدار 7 لاني مجربو على الاصدار 7 وعلى فايرفوكس وشغال , بخصوص الاشارة التي تظهر لك باخر السطور حاول تغيير ترميز الملف الى utf-8 بدون BOM لاني اعتقد الاشارة سببها BOM يعني Byte Order Mark .

    الى الامام





    __________________
    EbNCaNa اخوكم ابن قانا

    [درس] قائمة بريدية بأسهل الطرق بواسطة PHP

    [توقيعك يجب أن لا يكون أطول من 400 حرف يتضمن تجاوز كود المنتدى] - الى متى المعاناة يا حضرة الأدارة ؟

  8. #8
    عضو شرف
    تاريخ التسجيل
    May 2007
    المشاركات
    1,647


    اخوي ما بعرف اذا ردك الي ولا للاخ 7ota لكن بكل الاحوال اذا استعملت دالتي فانا لما اجربها باكسبلورر 6 واصلن خلص تاريخو لازم تنتقل للاصدار 7 لاني مجربو على الاصدار 7 وعلى فايرفوكس وشغال , بخصوص الاشارة التي تظهر لك باخر السطور حاول تغيير ترميز الملف الى utf-8 بدون BOM لاني اعتقد الاشارة سببها BOM يعني Byte Order Mark .

    الى الامام
    سببها هو اقتطاع نص متعدد البايتات .. Multi-Byte String من وسط أحد الأحرف .. حيث أن الحرف الواحد يتكوّن من أكثر من بايت ، وبعرض بايت دون الآخر لن يظهر الحرف بالشكل المطلوب ..

    لذلك استخدام دالة mb_substr ومجموعة دوال mb الخاصة بالتعامل مع المحارف الموصوفة بـ Multi-Byte هو الحل الأمثل برأيي .. بغض النظر عن الآلية المستخدمة كما في الردود في الأعلى ..

    تحياتي، أشرف السمهوري





    __________________
    # اتبعني على Twitter
    # عِرفان ساهم ببناء المحتوى العربي العلمي على الإنترنت!

  9. #9
    عضو نشيط جدا
    تاريخ التسجيل
    May 2007
    المشاركات
    509


    اخوي اشرف شكرا للمعلومات والفائدة .

    ملاحظة : كلمة חיבר يجب ان تكتب ח'יבר لكي تقرأ كحرف الخاف ولكي يفهمها اليهود جيدا .





    __________________
    EbNCaNa اخوكم ابن قانا

    [درس] قائمة بريدية بأسهل الطرق بواسطة PHP

    [توقيعك يجب أن لا يكون أطول من 400 حرف يتضمن تجاوز كود المنتدى] - الى متى المعاناة يا حضرة الأدارة ؟

  10. #10
    عضو شرف
    تاريخ التسجيل
    May 2007
    المشاركات
    1,647


    العفو واجبنا .. وشكراً لإفادتك تم التعديل .. لا تحرمنا من معلوماتك ..!





    __________________
    # اتبعني على Twitter
    # عِرفان ساهم ببناء المحتوى العربي العلمي على الإنترنت!

  11. #11
    عضو نشيط
    تاريخ التسجيل
    Jan 2005
    المشاركات
    89


    شكرا اخواني لكل من شارك بالرد على التساؤل
    اعتذر عن ردي الاول لأنه كان موجها فقط للاخ اصيل و السبب انه عند زيارتي للموقع لم اشاهد باقي الردود و اجهل السبب
    و تفاجأت ان هناك ردين قبل ردي.

    المهم انني وجدت الحل عن طريق طرح الاخ اصيل + ملاحظة الاخ اشرف و الرابط الذي وضعه
    و قد كان الحل النهائي الذي اريده كالتالي
    كود PHP:
    <?php

    $search 
    = array('@<script[^>]*?>.*?</script>@si',
                       
    '@<style[^>]*?>.*?</style>@siU',
                       
    '@<[\/\!]*?[^<>]*?>@si',
                       
    '@<![\s\S]*?--[ \t\n\r]*>@'
    );

    $row->text preg_replace($search''$row->text);

    mb_internal_encoding("UTF-8");
    echo  
    $row->text mb_substr($row->text0200);

    ?>
    ارجو من الأخوة الافادة ان كان هذا الامر فيه اي شي خاطئ و شكرا.










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

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

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