جهِّز نفسك لسوالف كاست، واحصل على Macbook Air
ويكيمانيا 2008. الإسكندرية، من 17 وحتى 19 يوليو

 

العودة   سوالف سوفت > قسم تطوير وبرمجة المواقع للمتقدمين > PHP
المدوّنات البحث مشاركات اليوم اجعل كافة المشاركات مقروءة

رد
 
LinkBack أدوات الموضوع
عضو نشيط
تاريخ التسجيل: Sep 2006-
#1 (permalink)  
[مطورة] دالة 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 علي النص قبل تمريره الي الدالة.

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






التصميم غير متواجد حالياً   قديم 14-04-2008, 01:27 AM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: May 2007-
#2 (permalink)  

دالة جميلة ..

كود 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 ومع ذلك فهي موجودة ، اتمنى اضافة هذه الخاصية ( السماح بالوسوم المحددة فقط ) ، ايضاً خاصية تعدد الاسطر ..






Dev11 غير متواجد حالياً   قديم 14-04-2008, 04:06 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Sep 2006-
#3 (permalink)  

أخي 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); 






التصميم غير متواجد حالياً   قديم 14-04-2008, 06:07 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: Nov 2005-
#4 (permalink)  

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






__________________
أهلا و سهلا بكم في :-
موقع دار الأوائل
-----------------
تفضل معنا
خدمات الاستضافة مع تركيب و دعم خاص للبوابة العربية لكافة العملاء
موقع خدمات العرب
عبقري العرب متواجد حالياً   قديم 14-04-2008, 07:37 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Jun 2005-
#5 (permalink)  

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






__________________
Keepondev | مدونه شديد التخصص فى الجافاسكربت
Dezology غير متواجد حالياً   قديم 14-04-2008, 08:16 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: May 2007-
#6 (permalink)  

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






Dev11 غير متواجد حالياً   قديم 14-04-2008, 09:25 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: May 2007-
#7 (permalink)  

حقيقة دالة رائعة جداً ،، لدرجة انها قد تغنيك عن استخدام الـ 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')); 
أكرر شكري لك






Dev11 غير متواجد حالياً   قديم 14-04-2008, 09:44 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: May 2007-
#8 (permalink)  

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

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






__________________
a000a.uni.cc
Maximum file size : 2 mb
جميع الامتدادات متاحة بدون استتناء
--------------------
[نقاش] : أساسيات برمجة منتدى
azizsoft غير متواجد حالياً   قديم 15-04-2008, 12:06 AM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Sep 2006-
#9 (permalink)  

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

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






التصميم غير متواجد حالياً   قديم 15-04-2008, 12:27 AM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: May 2007-
#10 (permalink)  

ملاحظة
الدالة حساسة لحالة الأحرف . يعني أن
كود 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)> 
يا ليت تطور الدالة حتى تتجاهل حالة الأحرف
و شكرا مرة أخرى






__________________
a000a.uni.cc
Maximum file size : 2 mb
جميع الامتدادات متاحة بدون استتناء
--------------------
[نقاش] : أساسيات برمجة منتدى
azizsoft غير متواجد حالياً   قديم 16-04-2008, 01:30 AM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Sep 2006-
#11 (permalink)  

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

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






الملفات المرفقة
نوع الملف: txt stripAttribs.txt‏ (2.0 كيلوبايت, المشاهدات 15)
التصميم غير متواجد حالياً   قديم 16-04-2008, 02:26 AM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: May 2007-
#12 (permalink)  

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

الدالة قيد التجربة






__________________
a000a.uni.cc
Maximum file size : 2 mb
جميع الامتدادات متاحة بدون استتناء
--------------------
[نقاش] : أساسيات برمجة منتدى
azizsoft غير متواجد حالياً   قديم 16-04-2008, 11:50 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Apr 2008-
#13 (permalink)  

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


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






menokia غير متواجد حالياً   قديم 20-04-2008, 05:48 AM
رد مع اقتباس
رد


أدوات الموضوع

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

كود [IMG] متاحة
كود HTML معطلة
Trackbacks are متاحة
Pingbacks are متاحة
Refbacks are متاحة


المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
بمناسبة زواج اخينا jala ...مبروووووك ... وشاركوا اخوكم الفرحة نويصر سوالف عامة 13 11-01-2006 03:09 PM
ما رأيكم ما هو الافضل ؟؟؟JSP او php ؟؟؟؟؟؟ ..............(موضوع للنقاش ) ابو مشعل تطوير الويب 20 06-11-2002 03:49 PM
Winsock.ocx طالب الروسي أخبار الإنترنت والتقنية ومناقشتها 7 01-08-2001 10:44 AM
درس ــ تثبيت برنامج WWWThreads في جهازك الشخصي الحائر تطوير الويب 73 17-02-2001 09:36 PM
تركيب vB تطوير الويب 9 07-08-2000 06:41 AM


الساعة الآن: 01:01 AM بتوقيت المملكة العربية السعودية