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

الموضوع: [مطورة] دالة stripAttribs لحذف الـ attributes من وسوم HTML

  1. #1
    عضو نشيط
    تاريخ التسجيل
    Sep 2006
    المشاركات
    69

    [مطورة] دالة stripAttribs لحذف الـ attributes من وسوم HTML



    السلام عليكم,

    كنت قد وضعت الدالة في أحد الردود داخل هذا الموضوع
    مساعدة في دالة الاستبدال eregi_replace - سوالف سوفت

    ولكن قمت بتطويرها لتلافي بعض المشاكل ولم أستطع التعديل علي الدالة في الموضوع الأصلي.

    كذلك قمت بوضع بعض التعليقات داخل الدالة.

    لذلك أرجو من الاخوان الذين قاموا بتنزيل الدالة نسخ الدالة المطورة من هنا

    كود PHP:
    /**
     * Function to strip unwanted HTML tag attributes
     * while allowing some attributes for each tag.
     * 
     * Example:
     * <code>
     * <?php
     
    $string stripAttribs($string, array('img' => 'src,alt'));
     * 
    ?>
     * </code>
     * This line of code will strip all HTML tag attributes found in
     * the variable $string except for "src" and "alt" attributes in
     * the "img" HTML tag.
     *
     * @author Ahmed Mansi <dev.ahmed.mansi@gmail.com>
     * @copyright Copyright (c) 2008, Ahmed Mansi
     * @param string $text The string to search in
     * @param array $allowedAttribs optional Array of allowed attributes
     * @return string
     *
    */
    function stripAttribs($text, $allowedAttribs = array())
    {
        // get all HTML tags containing attributes
        preg_match_all('#<([a-zA-Z]+?)\s+?.*>#Us', $text, $allTags);
        
        for ($i = 0; $i < count($allTags[0]); $i++) {
            // enter loop if we are to allow some attributes for current tag
            if (array_key_exists($allTags[1][$i], $allowedAttribs)) {
                $allowedTagAttribs = str_replace(' ', '', $allowedAttribs[$allTags[1][$i]]);
                $allowedTagAttribs = str_replace(',', '|', $allowedTagAttribs);
                
                $pattern = '(?:' . $allowedTagAttribs . ')\s*=\s*'
                         . '(?:"[^"]*"|\'[^\']*\'|[^>\s]*)';
                         
                $cleanNewlines = str_replace(array("\r\n", "\r", "\n"), ' ', $allTags[0][$i]);
                         
                preg_match_all("#$pattern#i", $cleanNewlines, $matches);
                
                $strippedTag = '<' . $allTags[1][$i] . ' ' . implode(' ', $matches[0]);
            } else { // strip all tags (by returning just the tag name)
                $strippedTag = '<' . $allTags[1][$i];
            }
            
            // add a slash in the end of no-end-tag tags
            $noEndTags = array(
                'br', 'meta', 'img', 'hr', 'frame', 'base',
                'input', 'param', 'col', 'area', 'link'
            );
            $strippedTag .= in_array($allTags[1][$i], $noEndTags) ? ' />' : '>';
            
            // replace the original tag with the stripped one
            $text = str_replace($allTags[0][$i], $strippedTag, $text);
        }
        return $text;
    }
    كيفية استخدام الدالة:

    الدالة تأخد بارامترين:
    الأول: النص الذي ستعالج وسوم HTML بداخلة
    الثاني هو الـ Attributes المسموح بتواجدها داخل وسوم الـ HTML. بمعني أننا سنترك هذه الوسوم ولن نحذفها.
    والبارامتر عبارة عن مصفوفة لكل عنصر فيها :
    - مفتاح: اسم وسم الـ html
    - قيمة : الـ Arrtibutes المسموحة له مفصول بينها ب comma مثل "href,id"

    والبارامتر الثاني اختياري يمكن عدم تمريره للدالة

    مثال علي الاستخدام

    كود PHP:
     $string stripAttribs($string, array('img' => 'src,alt')); 
    ملحوظة: اذا كانت magic_quotes مفعلة بالسيرفر يجب التأكد من استخدام دالة stripslashes علي النص قبل تمريره الي الدالة.

    أرجو أن تفيدكم







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


    دالة جميلة ..

    كود PHP:
    $string '<p align="center" dir="rtl"><u>this</u> is a <strong>p</strong>.</p>
    <img src="image.jpg" width="200" border="0" alt="image.jpg" />'
    ;
    echo 
    stripAttribs($string, array('p''img' => 'src, alt'));
    /*
    <p><u>this</u> is a <strong>p</strong>.</p>
    <img src="image.jpg" alt="image.jpg" />
    */ 
    هناك وسوم لم اسمح بوجودها مثل strong, u ومع ذلك فهي موجودة ، اتمنى اضافة هذه الخاصية ( السماح بالوسوم المحددة فقط ) ، ايضاً خاصية تعدد الاسطر ..






  3. #3
    عضو نشيط
    تاريخ التسجيل
    Sep 2006
    المشاركات
    69


    أخي asaamas ليست وظيفة الدالة حذف الوسوم التي لم تسمح بوجودها, وانما فقط حذف الـ attributes من كل الوسوم ما عدا attribs معينة في وسوم معينة تقوم أنت بتحديدها في البارامتر الثاني للدالة.

    يمكنك استخدام دالة strip_tags لتحديد وسوم معينة فقط تقوم بالسماح بها (وهي تقوم بالوظيفة علي أكمل وجه), ومن ثم تمرر الناتج علي دالة stripAttribs لحذف الـ attributes من هذه الوسوم المسموحة.

    كود PHP:
    $string '<p>Hello <b onmouseover="maliciousJS();">I am inside an innocent tag</b></p>';
    $string strip_tags($string'<b>');
    $string stripAttribs($string); 







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


    داله مفيده جدا
    شكرا لك اخي العزيز





    __________________
    أهلا و سهلا بكم في :-
    موقع دار الأوائل
    تفضل معنا خدمات الاستضافة
    موقع العبقري لخدمات الاستضافة



  5. ممتاززززززززززززززززززززززززززززززززززززززززز ... جعله الله فى ميزان حسناتك و نفعنا و بك





    __________________
    Keepondev | مدونه شديد التخصص فى الجافاسكربت
    جافاسكربت الموجهه بالكائنات | أنماط تصميم جافاسكربت

  6. #6
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


    نعم هذا هو المقصد .. أشكرك أخي الكريم وبالتوفيق لك ..






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


    حقيقة دالة رائعة جداً ،، لدرجة انها قد تغنيك عن استخدام الـ bbcode ..
    كود PHP:
    echo stripAttribs(strip_tags($string'<h1> <h2> <h3> <p> <br> <b> <i> <u> <a> <img> <ul> <li> <code> <pre> <center> <blockquote> <ol>'), array('a' => 'href, title''img' => 'src, title, alt')); 
    أكرر شكري لك






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


    مهما اجتهدنا في صياغة كلمات الشكر فانها تبقى قليلة في حقك :app:

    ليس بوسعي أن أقول سوى : جزاك الله خيرا






  9. #9
    عضو نشيط
    تاريخ التسجيل
    Sep 2006
    المشاركات
    69


    أشكركم جميعاً علي تفاعلكم وتشجيعكم

    ايضاً خاصية تعدد الاسطر ..
    شكراً أخي asaamas علي تنبيهي لهذه النقطة فحقيقةً هي لم تكن في بالي إطلاقاً. وقد قمت بتعديل الدالة في الموضوع لتدعم الوسوم متعددة الأسطر.






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


    ملاحظة
    الدالة حساسة لحالة الأحرف . يعني أن
    كود PHP:
    $tag '<IMG border="3" src="image/dddd  border="3"" onload=a12.createOn(this)> 
    ليست متل
    كود PHP:
    $tag '<img border="3" src="image/dddd  border="3"" onload=a12.createOn(this)> 
    يا ليت تطور الدالة حتى تتجاهل حالة الأحرف
    و شكرا مرة أخرى






  11. #11
    عضو نشيط
    تاريخ التسجيل
    Sep 2006
    المشاركات
    69


    هذه روعة الـ Open source .. يتم اصطياد الأخطاء ومعالجتها أولاً بأول

    شكراً أخي عزيز سوفت علي الملاحظة وتم التعديل وارفاق الدالة المطوَّره





    الملفات المرفقة الملفات المرفقة

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


    الى الأمام يا بطل

    الدالة قيد التجربة :1power:






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


    بارك الله فيك و جزاك الله خير


    تحياتي
    نوكيا الشرق الاوسط










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

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

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