سؤال
مرحبًا ، لقد اكتشفت مؤخرًا مشكلة يكون فيها الأشخاص الذين يستخدمون رمز BB لإدخال الروابط قادرين على التعامل معها.
من المفترض أن يدخلوا شيئًا مثل:
[LINK]http://www.domain.com[/LINK]
ومع ذلك ، يمكنهم إدخال شيء كهذا لجعل لون الرابط أحمر:
[LINK]http://www.domain.com 'span style="color:red;"'[/LINK]
هذا هو الكود الذي يحوله:
$text = preg_replace("/\\[LINK\\\](.*?)\\[\/LINK\\]/is",
"<a href='$1' target='_blank'>$1</a>", $text);
ايضا, ، لقد نسيت ، هذا هو النوع الآخر:
[LINK=http://www.domain.com]example text[/LINK]
$text = preg_replace("/\\[LINK\=(.*?)\\\](.*?)\\[\/LINK\\]/is",
"<a href='$1' target='_blank'>$2</a>", $text);
المحلول
لا تسمح باقتباسات ومثل هذا في عنوان URL ، وعلامات الشريط التي فشلت في الممر الأول:
$text = preg_replace("/\[LINK\]([^'\"\\s]*?)\[\/LINK\]/is",
"<a href='$1' target='_blank'>$1</a>", $text);
$text = preg_replace("/\[LINK\](.*?)\[\/LINK\]/is", "<i>(link removed)</i>", $text);
نصائح أخرى
هذا أمر خطير للغاية ، خاصة إذا كان ضيوفك أذكياء بما يكفي لبدء إضافة معالجات onclick على الرابط.
كما قال MVDS ، استبدل جميع الاقتباسات والرافعة. المدخلات التعقيم ضرورية.
بالنسبة لمشكلة عنوان URL هذه ، لن يساعد ذلك بشكل ضروري. ومع ذلك ، هناك الكثير من صحة REGEX URL والتي من شأنها تجريد أي معدلات رمز صغير شقي من عنوان URL الفعلي.
لا تنتمي إلى StackOverflow