這是我的bbcode的報價後(12345是原始帖子的ID):PHP:如何用擴展數據(遞歸)替換bbcode-quote?
[quote=12345] ... citation ... [/quote]
我想顯示這樣的話:
<blockquote>
<a href="">Username</a> at 2012-09-12 11:00 a.m. (<a href="">original</a>):
... citation ...
</blockquote>
理念(僞) :
$bbcode_content = "[quote=12345] ... citation ... [/quote]";
// 1. get the $post_id
$post_id = replace('/\[quote\=(.*?)\]/is','$1', $bbcode_content);
// 2. select the post data from databse
$post_obj = $DB->select("SELECT `author`, `timestamp` FROM `posts` WHERE id=".$post_id);
// 3. build an extended bbcode tag
$bbcode_content = "[quote post_id={$post_id} timestamp={$post_obj->timestamp} author={$post_obj->author}]";
// 4. bbcode to html
$html = replace("[quote post_id=(*) timestamp=(*) author=(*)]", '<blockquote><a href="">$1</a> at '.date("Y-m-d h:i", $2).' (<a href="forum/post/$3">original</a>)', $bbcode_content);
$html = replace("[/quote]", "</blockquote>", $html);
問題:
- 如何更換這個東西遞歸?也許與preg_replace_callback?
- 我的第4點「bbcode to html」的正則表達式是什麼?
我有點困惑。你將如何解決這個問題?
在此先感謝!
我只是想說,如果您的使用bbcode的目的是爲了在不引入xss漏洞的情況下允許標記,您不應該嘗試編寫自己的bbcode處理器。做正確的做法看起來很難,而且你的代碼已經充滿了安全漏洞。我想我會提到這一點,因爲如果安全性不是問題,它更容易只允許html。 – goat
^^非常。你真的想爲此使用一個經過良好測試的第三方庫。有*很多*。 – Charles
我會重新考慮編碼我自己的bbcode處理器。我沒有想到這會是那麼廣泛。謝謝! –