السلام عليكم
أريد استخدام دالة eregi_replace لتقنين ادخال الصور بحيت لا يمكن للعضو التحكم بطولها و عرضها عن طريق html
متلا
أريدها أن تصبحكود HTML:<img border="3" src="image/img.gif" onload=a12.createOn(this)>
كود HTML:<img src="image/img.gif" >
السلام عليكم
أريد استخدام دالة eregi_replace لتقنين ادخال الصور بحيت لا يمكن للعضو التحكم بطولها و عرضها عن طريق html
متلا
أريدها أن تصبحكود HTML:<img border="3" src="image/img.gif" onload=a12.createOn(this)>
كود HTML:<img src="image/img.gif" >
__________________
مركز الملفات المشتركة - الإصدار التجريبي الرابع MMM_uploader_v1b4
جرب هذا الكود أخي عزيز سوفت ..كود PHP:$tag = '<img border="3" src="image/img.gif" onload=a12.createOn(this)>';
preg_match('#src="(.*)"#', $tag, $matches);
$tag = '<img src="'. $matches[1] .'">';
وسوف أقوم ببرمجة دالة لتنقيح الـ arrtibutes من وسوم الـ HTML علي طريقة دالة strip_tags ليمكن استخدامها بشكل أكثر عموماً بإذن الله.
شكرا لتفاعلك مع الموضوع
الحل الدي وضعته يقوم بتنقيح الأكواد من أول صورة فقط مع العلم أني اريد استخدام الكود لمنع العضو من التلاعب بجميع الصور الموجودة في مشاركته
لو قام العضو بارسال مشاركة تحتوي على أكتر من صورة فان الكود سيكون فعال على أول صورة فقط:con2:
و تحيتي لك
__________________
مركز الملفات المشتركة - الإصدار التجريبي الرابع MMM_uploader_v1b4
![]()
الاخ "التصميم" ممكن تشرح لنا لماذا استخدمت ال"#"؟ لم ارها من قبل! هل ممكن تشرح لنا الفائده منها؟
الأستاذ hilaby ، شاهدت هذا الرمز من قبل ولم أكن أعرف داعي استخدامه،
بعد قليل من البحث:
من مقدمة الموضوع في php.net :The syntax for patterns used in these functions closely resembles Perl. The expression should be enclosed in the delimiters, a forward slash (/), for example. Any character can be used for delimiter as long as it's not alphanumeric or backslash (\). If the delimiter character has to be used in the expression itself, it needs to be escaped by backslash. Since PHP 4.0.4, you can also use Perl-style (), {}, [], and <> matching delimiters. See Pattern Syntax for detailed explanation.
PHP: Introduction - Manual
For example, if you wanted to search for text surrounded by opening and closing tags like'<TD>SELL</TD>' and replace it with nothing (erase it), you might be tempted to use a regex like this:
<?php
$myNewText = preg_replace('/<TD>SELL</TD>/', "", $myText);
?>
This does not work properly. As mentioned in the Introduction at the top of http://www.php.net/manual/en/ref.pcre.php, if the delimiter appears in the middle of your regular expression, then you must put a \ character before it. So this DOES work:
<?php
$myNewText = preg_replace('/<TD>SELL<\/TD>/', "", $myText);
?>
That same Introduction also mentions that you can start and end your expression with characters other than the usual /. Because there are no % characters in the middle of my expression above, I might prefer to use the following:
<?php
$myNewText = preg_replace('%<TD>SELL</TD>%', "", $myText);
?>
That also works correctly, and I did not need a \ before the /.
من إحدى التعليقات في المانيوال كذلك ..
زبدة الكلام، يمكن استخدام أي رمز حسب الشروط في الاقتباسين ..
تحياتي، أشرف السمهوري
السلام عليكم,
أستاذ خالد ..
كما تفضل أخي أشرف السمهوري بالتوضيح، فإن الـ # مجرد Delimiter قمت باستخدامه مؤخراً بدلاً من الـ / وذلك لأن الـشارب # لا تتواجد كثيرا داخل الباترن بينما السلاش تصادفنا أكثر فنضطر لتهريبها.
هل تري معي أنها أفضل أم أن هناك مشكلة لا أراها؟
بالنسبة للدالة التي وعدتكم بها فقد أنجزتها بعد عمل أكثر من ساعتين وسوف أرفقها هنا لنقوم بتجربتها سوية وتنقيحها من الأخطاء لأني لما أجربها جيداً.
مثال علي استخدام الدالةكود PHP:function stripAttribs($text, $allowedAttribs = array())
{
preg_match_all('#<(\w+?)[^>]*>#iU', $text, $allTags);
for($i = 0; $i < count($allTags[0]); $i++) {
if(array_key_exists($allTags[1][$i], $allowedAttribs))
{
$pattern = str_replace(
array(', ', ','),
'=["\']??[^"\'\s]+?["\']??|',
$allowedAttribs[$allTags[1][$i]]
) . '=["\']??[^"\'\s]+?["\']??';
preg_match_all("#$pattern#iU", $allTags[0][$i], $matches);
$strippedTag = '<' . $allTags[1][$i] . ' ' . implode(' ', $matches[0]) . '>';
$text = str_replace($allTags[0][$i], $strippedTag, $text);
}
else
{
$strippedTag = '<' . $allTags[1][$i] . '>';
$text = str_replace($allTags[0][$i], $strippedTag, $text);
}
}
return $text;
}
حيث البارامتر الأول هو النص المراد تنقيحهكود PHP:$string = '<font color="#00ff00"><a href="hello.php" id="welcome" onclick="jsFunc();">Hello</a></font>';
$string = stripAttribs($string, array('a' => 'href'));
والبارمتر الثاني هو الـ Attributes المسموح بتواجدها داخل وسوم الـ HTML. بمعني أننا سنترك هذه الوسوم ولن نحذفها.
والبارمتر عبارة عن مصفوفة لكل عنصر فيها :
- مفتاح: اسم وسم الـ html
- قيمة : الـ Arrtibutes المسموحة له مفصول بينها ب comma مثل "href,id"
وما دون ذلك من وسوم HTML غير مذكورة في المصفوفة يتم حذف أي بارمتر ممرر لها.
------------------------
بالنسبة لمشكلتك أخي عزيز سوفت, علي افتراض أنك تريد تمرير وسوم الصور فقط متواجداً فيها src attribute فقط
أرجو أن أكون قد أفدتكمكود PHP:$text = stripAttribs(strip_tags($text, '<img>'), array('img' => 'src'));
التعديل الأخير تم بواسطة التصميم ; 13-04-2008 الساعة 01:21 AM سبب آخر: تعديل في الدالة + توضيح للشرح
و الله الدالة رائعة جدا و هي ما كنت أبحث عنه بالضبط :app:
لكن تواجهني بها مشكلة غريبة جدا :
ادا كان النص الموجه الى الدالة قادم من مصفوفة $_POST لا تعمل
__________________
مركز الملفات المشتركة - الإصدار التجريبي الرابع MMM_uploader_v1b4
النتيجة تكون
كود HTML:<img src=\">
__________________
مركز الملفات المشتركة - الإصدار التجريبي الرابع MMM_uploader_v1b4
أي خدمةو الله الدالة رائعة جدا و هي ما كنت أبحث عنه بالضبط
أنا جربتها حالاً والنتيجة مظبوطة :con2:لكن تواجهني بها مشكلة غريبة جدا :
ادا كان النص الموجه الى الدالة قادم من مصفوفة $_POST لا تعمل
ما شاء الله عليك أخي التصميم
تم حل المشكلة عن طريق هده الدالة و أسأل الله أن يجعلها في ميزان حسناتك
:app:كود PHP:$string = stripslashes($_POST['html']);
$string = stripAttribs($string, array('img' => 'src', 'a' => 'href'));
echo $string;
__________________
مركز الملفات المشتركة - الإصدار التجريبي الرابع MMM_uploader_v1b4
تبقى أن نعرف كيف نسمح بأكثر من كود arrtibutes داخل الوسم
متل
كود HTML:<font size="4" color="#FF0000">text</font>
__________________
مركز الملفات المشتركة - الإصدار التجريبي الرابع MMM_uploader_v1b4
أعتقد المشكلة عندك في الـ Magic_quotes .. المفروض تكون off
بالنسبة للسماح بأكثر من attribute أنا قولتها في شرح الدالة فوق. بس مش مشكلة نقول كمان
كود PHP:$string = stripAttribs($string, array('font' => 'size,color'));
كفيت و وفيت
وجزاك الله عنا خير جزاء
__________________
مركز الملفات المشتركة - الإصدار التجريبي الرابع MMM_uploader_v1b4
جزاك الله خير الجزاء هذه الدالة فادتني جدا في مشروع اقوم به الان
بيض الله وجهك
__________________
إِنْ لَمْ تُحْسِنْ ظنَّكَ بِهِ لِأَجْلِ وَصْفِهْ فَحَسِّنْ
ظَنَّكَ بِهِ لِأَجْلِ مُعَامَلَتِهِ مَعَكْ فَهَلْ عَوَّدَكَ إِلَّا حَسَنًا؟
وَهَلْ أَسْدَى إِلَيْكَ إِلَّا مِنَنًا؟
جزانا الله واياكم
قمت بتطوير الدالة وتجدون الدالة المطورة في هذا الموضوع
http://www.swalif.net/softs/swalif45/softs225318/