السلام عليكم,
أستاذ خالد ..
كما تفضل أخي أشرف السمهوري بالتوضيح، فإن الـ # مجرد 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'));
أرجو أن أكون قد أفدتكم