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

الموضوع: مساعده في كوود

  1. #1

    مساعده في كوود



    السلام عليكم ورحمة الله وبركاته

    الأخوان المبرمجين في سوالف أنا بصدد عمل مشروع بسيط ووصلت لنقطه في البرمجه حيرتني وهي كالتالي :

    لدي نص من النصوص بهذا الشكل
    كود HTML:
    <img src="http://test.com/f.gif" onload="func2()" onmouseover="func1()" border="0" alt="">
    الذي أريده هو البحث في هذا النص عن جمله لها شروط معينه وهي :
    1- الجمله تبدأ بكلمة on سواءاً كانت بالكابتل أو الاسمول
    2- بعد كلمة on بالامكان أن تأتي اي سلسله من الحروف من a الى z مثل : onload سواءاً كانت بالكابتل أو الاسمول .
    3- بعدها تأتي علامة المساواه = .
    4- بعد علامة المساواه تأتي رموز التنصيص " ' أو لا تأتي .
    5- يأتي بين علامة التنصيص اي شي .

    بمعنى أوضح أريد أن استبدل الجمل التي على شكل كلمة onmouseover و onload .... الخ التي تأتي بين علامة الـ < و > بما يوجد بداخلها من أكواد .

    الحل هو باستخدام جمل الـ REGX طبعاً وباستخدام دالة preg_replace ولكن طريقة تركيب هذه الجمل صعب جداً.

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

    شكراً لكم







  2. #2
    عضو شرف
    تاريخ التسجيل
    Apr 2002
    المشاركات
    1,379


    البرنامج
    كود PHP:
    <?
    $text 
    '<img src="hellof.gif" onload="fu1()" onmouseover="fun2()" border="0" alt="">
    <img src="sdff.gif" ondown="3rf()" onmoUseout="rr5()" border="0" alt="">
    <img src="ewr.gif" onclick="fun5()" onout="e2()" border="0" alt="">
    <img src="ww.gif" onload="asdf()" ondaif="dsf()" border="0" alt="">
    <a href="daif.net" OnClick="alert(\'hello\');">daif</a>'
    ;

    preg_match_all("/(on+[a-z]+=\".*\")/iU",$text,$out);
    print_r($out);
    ?>
    الناتج
    كود:
    Array
    (
        [0] => Array
            (
                [0] => onload="fu1()"
                [1] => onmouseover="fun2()"
                [2] => ondown="3rf()"
                [3] => onmoUseout="rr5()"
                [4] => onclick="fun5()"
                [5] => onout="e2()"
                [6] => onload="asdf()"
                [7] => ondaif="dsf()"
                [8] => OnClick="alert('hello');"
            )
    
        [1] => Array
            (
                [0] => onload="fu1()"
                [1] => onmouseover="fun2()"
                [2] => ondown="3rf()"
                [3] => onmoUseout="rr5()"
                [4] => onclick="fun5()"
                [5] => onout="e2()"
                [6] => onload="asdf()"
                [7] => ondaif="dsf()"
                [8] => OnClick="alert('hello');"
            )
    
    )
    التعبير هو :
    كود:
    "/(on+[a-z]+=\".*\")/iU"
    الشرح
    البحث عن أي مجموعه تبدأ ب on + أي كلمة من a إلى z + = + " + أي شيء + "
    U يعنى مجموعه لا يتخللها نفس هذه التعبير (ما أعرف اشرحها )
    i يعنى التعبير لا يفرق بين الحروف الكبيره او الصغيره





    __________________
    ضيف الله العتيبي مبرمج حر و مهندس معتمد من زيند (ZCE)
    الاتصال: daif@daif.net او جوال: 0556639884
    الخدمات: تقديم استشارات برمجيه, تطوير بوابات/خدمات إلكترونيه للقطاع العام او الخاص .

  3. #3


    ماشاء الله عليك كبير يا daif ابدعت بكتابة التعبير يسلم راسك

    الحقيقه أنا وصلت لمثل هذا التعبير ولكن بتغيير كبير طبعاً :shy:
    ولكن الذي عقدني هو علامة التنصيص بصراحه !!

    لآن علامة التنصيص تأتي بنوعين إما ' أو "

    ماذا لو كانت الجمل حسب الشكل التالي:
    كود HTML:
    onload='func1()'
    أو
    كود HTML:
    onload=func1()
    في الحاله الثانيه تنتهي الجمله بوجود علامة المسافه
    لكن في الحاله الأولى تنتهي الجمله فقط بوجود علامة '
    ونفس الكلام ينطبق على علامة "

    لا أدري كيف سيتم تركيبها حسب هذا الشرط المعقد!!
    هل سأقوم بتركيب تعبير لكل شرط على حده أم أضعها في تعبير واحد ؟

    عقدتني بصراحه جمل الـ REGX .

    بارك الله بيك يا أخ daif .






  4. #4
    عضو شرف
    تاريخ التسجيل
    Apr 2002
    المشاركات
    1,379


    طيب.... لا مانع ... أنت تقصد انه
    ربما يكون لديك علامة " أو ' أو لا شيء ...
    في التعابير القياسيه أو تعني هذه العلامه | لذلك سيكون شكل التعبير هكذا
    كود:
    "/(on+[a-z]+=(\".*\"|'.*'|.* ))/iU"
    الشرح
    لبحث عن أي مجموعه تبدأ ب on + أي كلمة من a إلى z + = + العباره (" + أي شيء + ") أو العباره (' + أي شيء + ') أو العباره (أي شيء +فراغ)

    ملاحظة العباره الأخيره تفي بالغرض ... لكن ذكرت التعبير بالكامل حسب طلبك هذه نفس النتيجه ..
    كود:
    "/(on+[a-z]+=(.* ))/iU"
    أي سؤال ...





    __________________
    ضيف الله العتيبي مبرمج حر و مهندس معتمد من زيند (ZCE)
    الاتصال: daif@daif.net او جوال: 0556639884
    الخدمات: تقديم استشارات برمجيه, تطوير بوابات/خدمات إلكترونيه للقطاع العام او الخاص .

  5. #5


    ممتاز جداً يا daif بدأت تمشي معي خطوه خطوه ماشاء الله عليك فهمتني بسرعه

    التعبير الأخير سبق وأن كتبته ولكن للأسف فشل معي حين وضعت المسافه بين علامتي التنصيص
    هذا مثال
    كود HTML:
    onload="var v='daif';"
    سيخرج من هذا التعبير هذه العباره
    كود HTML:
    onload="var
    أما التعبير التالي :
    كود HTML:
    "/(on+[a-z]+=(\".*\"|'.*'|.* ))/iU"
    فهو تعبير ممتاز ولكن هناك مشكله بسيطه مع بعض الجمل التي تأتي علامة التنصيص مدعومه بسلاش /
    مثال:
    كود HTML:
    onload="alert(\"hi\");"
    كود HTML:
    onload='alert(\'hi\');'

    سبق وأن قرأت عن علامة أو | وتعبت من علامات التكرار + و ؟ و * والتي لم أفهم حتى الان الفرق بينها !!
    ولكن كيف سأضع شرطاً الان في هذا التعبير حتى يتم تجاهل السلاش مع علامات التنصيص؟؟؟

    هنا العقده

    تسلملي والله تعبتك معي وريحتني من هم عناء برمجي كبييييييييير

    بارك الله بيك






  6. #6
    عضو شرف
    تاريخ التسجيل
    Apr 2002
    المشاركات
    1,379


    هناك اكثر من طريقه ...

    الاولى ,,, هي ان تستبدل اي عباره "\ بعباره ثانيه __MYPROBLEM__ ثم تجري العباره بشكل عادي ..
    بعد ذلك تعيدها (افضل هذه الحل).

    كود PHP:
    <?
    $text 
    'onload="alert(\"hi\");"';
    $text str_replace('\"','__MB__',$text);
    preg_match_all("/(on+[a-z]+=\".*\")/iU",$text,$out);
    //استبدل هنا الكلمها السابقه بعكسها
    print_r($out);
    ?>
    الحل باستخدام التعابير
    كود:
    "/(on+[a-z]+=\".+\).*\")/iU"
    حاول تشرحه


    الحل الاخير ان تعرف ماذا يتبع التنصيص الاخيره " ... وتعيد بناء التعبير بمايناسبها .(تفرق بين التنصيص الاخيره والتى تأتي مسبوقع بشرطه)





    __________________
    ضيف الله العتيبي مبرمج حر و مهندس معتمد من زيند (ZCE)
    الاتصال: daif@daif.net او جوال: 0556639884
    الخدمات: تقديم استشارات برمجيه, تطوير بوابات/خدمات إلكترونيه للقطاع العام او الخاص .

  7. #7
    عضو فعال
    تاريخ التسجيل
    Feb 2002
    المشاركات
    1,454


    السلام عليكم

    جرب هالكود وان شاء الله اكون فهمت طلبك بشكل صحيح

    كود PHP:
    <?PHP
    echo '<pre>';
    $text " onclick  = 'alert(\"hi\");' ";
    $text2'onclick="alert(\'hi\');"';
    $text3'onclick = \'alert("hi")\'';
    $regexp '#(on+\w+)\s*=\s*[\'"]?(.*?)[\'"]?#Ui';
    preg_match_all($regexpstripslashes($text2), $result);
    print_r($result);
    echo 
    '</pre>';
    ?>
    اذا فيه خطأ او حالة ماغطيتها ياليت تقول لي وان شاء الله اعدلها لك

    تقبل تحياتي





    __________________
    شبكة مملكة العرب
    ---------------------
    استضافة مواقع تبدأ من 100 ريال سنويا
    خطط خاصة للموزعين
    سكربت دليل المواقع
    www.aknet.com

  8. #8


    ماشاء الله تبارك الله

    بدأ عددكم يزيد يارب كثر وبارك

    بارك الله بيكم أثريتم الموضوع نقاشاً ومن النادر أن يوجد أشخاص مثلكم بعلمكم
    الله يزيدكم يارب

    لا أريد أن أطيل عليكم بهذه المشكله أكثر من اللازم ولكن لدي إستفسارات بسيطه في هذا الرد حول ما أبدعتوا من جمل .

    أخي daif
    مشكلة تبديل جملة التنصيص المسبوقه بعلامة السلاش الى أي كلمه أخرى مثل __MB__ سوف تحدث لي إرباك أمني في البرنامج لأنه ربما يتم استخدامها في أي جزء من النص المرسل.

    التعبير الذي كتبه الأخ code4arab ممتااااااااااز جداً وغطى على كل المشاكل خصوصاً مشكلة وجود المسافات بين كلمة Onload وعلامة = وأيضاً بين علامة الـ = وبين علامات التنصيص ولكن المشكله في نقطه واحده فقط لا غير
    وهي عند عدم استخدام التنصيص بعد المساواة
    على سبيل المثال
    كود HTML:
    <img scr="file.gif" onload = func() border=0>
    الناتج الذي سيخرج هو
    كود HTML:
    onload=func() border=0
    والمفروض يخرج لي فقط
    كود HTML:
    onload = func()
    على كل حال ليست بمشكله كبيره وبالامكان إصلاح هذه المشكله وبارك الله فيكم أنكم وصلتم بالتعبير الى هذه النقطه.
    ولكن استفساراتي يا أخواني حول الـ REGX هي كالتالي :

    التعبير الذي وصلنا اليه وهو :
    كود HTML:
    '#(on+\w+)\s*=\s*[\'"]?(.*?)[\'"]?#Ui'
    لماذا أستخدمت علامة + بعد الـ \w ولماذا لم تستخدم الـ * ؟ أيضاً علامة \s استخدم بعدها علامة * ولماذا لم تستخدم الـ + كمثيلتها ؟؟ لأنني لم أفهم الفرق بينها حتى الان ؟
    لماذا استخدمت علامة الاستفهام ؟ بعد [\'"] ولماذا تستخدم ؟

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

    شكراً من كل قلبي






  9. #9
    عضو فعال
    تاريخ التسجيل
    Feb 2002
    المشاركات
    1,454


    السلام عليكم

    الكود التالي هو مرادك باذن الله
    كود PHP:
    <?PHP 
    echo '<pre>'
    $text ' onlocd      =   "asdad"     name="test"';
    $text2"onclick='var x=\"b\";'   name='xx' >";
    $text3'<img scr="file.gif" onload="alert(\"hi\");"     border=0>';
    $regexp '/(on[a-z]+)\s*=\s*(["\'])?(.*?)(?(2)\2[\s>]|\s)\s*/i'
    preg_match_all($regexp$text3$result); 
    print_r($result); 
    echo 
    '</pre>'
    ?>

    بالنسبة لـ \w فهي تمثل اي حرف او رقم وبامكانك استبدالها بـ [a-zA-Z] إذا اردت ان يكون نص انجليزي يتكون من الحروف الانجليزية الصغيرة او الكبيرة

    اما بالنسبة للعلامات شرحها كالتالي:
    . اي حرف
    * صفر او اكثر
    + مرة او اكثر
    ؟ صفر او مرة واحدة فقط

    تمنياتي لك بالتوفيق





    __________________
    شبكة مملكة العرب
    ---------------------
    استضافة مواقع تبدأ من 100 ريال سنويا
    خطط خاصة للموزعين
    سكربت دليل المواقع
    www.aknet.com





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

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

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