سؤال

حسنًا ، أنا أستخدم وظيفة BBCode صغيرة للمنتدى الذي أعمل جيدًا ، لذلك إذا وضعت ، على سبيل المثال ، وضعت

[b]Text[/b]

سوف يطبع النص بالخط العريض.

مشكلتي هي ، إذا كان لدي هذا الرمز:

[b]
Text[/b]

حسنًا ، لن ينجح ، وطباعة ذلك كما هو الآن.

فيما يلي مثال على الوظيفة التي أستخدمها:

function BBCode ($string) {
$search = array(
    '#\[b\](.*?)\[/b\]#',
);
$replace = array(
    '<b>\\1</b>',
);
return preg_replace($search , $replace, $string);
}

ثم عند صدىه:

.nl2br(stripslashes(BBCode($arr_thread_row[main_content]))).

لذلك سيكون سؤالي ، ما هو ضروري بحيث يعمل BBCode مع كل شيء بداخله ، ولكن ليس بالضرورة على نفس الخط.

في المثال:

[b]




Text



[/b]

سيكون ببساطة

نص

شكرا لك على أي مساعدة!

أليكس

هل كانت مفيدة؟

المحلول

أنت بحاجة إلى مُعدِّل متعدد الأسلوب, ، مما يجعل نمطك شيء مثل #\[b\](.*?)\[/b\]#ms

(لاحظ الخلاف m)

نصائح أخرى

هناك في الواقع امتداد PECL هذا يخفف من BBCode ، والذي سيكون أسرع وأمانًا من كتابته من نقطة الصفر بنفسك.

أنا استخدم هذا ... يجب أن يعمل.

$bb1 = array(
"/\[url\](.*?)\[\/url\]/is",
"/\[img\](.*?)\[\/img\]/is",
"/\[img\=(.*?)\](.*?)\[\/img\]/is",
"/\[url\=(.*?)\](.*?)\[\/url\]/is",
"/\[red\](.*?)\[\/red\]/is",
"/\[b\](.*?)\[\/b\]/is",
"/\[h(.*?)\](.*?)\[\/h(.*?)\]/is",
"/\[php\](.*?)\[\/php\]/is"
);

$bb2 = array(
'<a href="\\1">\\1</a>',
'<img alt="" src="\\1"/>',
'<img alt="" class="\\1" src="\\2"/>',
'<a rel="nofollow" target="_blank" href="\\1">\\2</a>',
'<span style="color:#ff0000;">\\1</span>',
'<span style="font-weight:bold;">\\1</span>',
'<h\\1>\\2</h\\3>',
'<pre><code class="php">\\1</code></pre>'
);

$html = preg_replace($bb1, $bb2, $html);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top