2

さて、私は自分が持っているフォーラムに小さな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]

単純になります

文章

助けてくれてありがとう!

アレックス

4

3 に答える 3

2

複数行の修飾子が必要です。これにより、パターンは次のようになります。#\[b\](.*?)\[/b\]#ms

(末尾に注意してくださいm

于 2010-09-28T00:56:41.447 に答える
2

実際には、BBcodeを解析するpecl拡張機能があります。これは、最初から作成するよりも高速で安全です。

于 2010-09-28T00:57:31.350 に答える
0

私はこれを使用します...それは動作するはずです。

$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);
于 2010-09-28T01:10:44.050 に答える