【发布时间】:2012-12-10 00:27:31
【问题描述】:
这是我引用帖子的 bbcode(12345 是原始帖子的 id):
[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 会更容易。
-
^^ 就是这样。您真的想为此使用经过良好测试的第三方库。有很多。
-
我将重新考虑编写自己的 bbcode 处理器。我没想到会那么广泛。谢谢!
标签: php recursion replace bbcode