PHP:如何用扩展数据(递归)替换bbcode引号?

PHP:如何用扩展数据(递归)替换bbcode引号?,php,recursion,replace,bbcode,Php,Recursion,Replace,Bbcode,这是我引用帖子的bbcode(12345是原始帖子的id): 我想这样显示报价: <blockquote> <a href="">Username</a> at 2012-09-12 11:00 a.m. (<a href="">original</a>): ... citation ... </blockquote> 2012-09-12上午11:00(): ... 引用。。。 Idea(伪代码):

这是我引用帖子的bbcode(12345是原始帖子的id):

我想这样显示报价:

<blockquote>
    <a href="">Username</a> at 2012-09-12 11:00 a.m. (<a href="">original</a>):
    ... citation ...
</blockquote>

2012-09-12上午11:00():
... 引用。。。
Idea(伪代码):

$bbcode_content=“[quote=12345]…引文…[/quote]”;
// 1. 获取$post\u id
$post\u id=replace('/\[quote\=(.*?\]/is'、'$1'、$bbcode\u内容);
// 2. 从数据库中选择post数据
$post_obj=$DB->select(“从`posts`WHERE id=“.$post_id=”中选择`author`、`timestamp`);
// 3. 构建扩展bbcode标记
$bbcode_content=“[quote post_id={$post_id}timestamp={$post_obj->timestamp}author={$post_obj->author}]”;
// 4. bbcode到html
$html=replace(“[quote post_id=(*)timestamp=(*)author=(*)]”,'at'.date(“Y-m-d h:i,$2)。'(),$bbcode_content);
$html=replace(“[/quote]”,“”,$html);
问题

  • 如何替换这些东西?也许和你一起
  • 我的第四点“bbcode到html”的正则表达式是什么
  • 我有点困惑。您将如何解决此问题


    提前谢谢

    您可以随时使用来处理此问题。

    看起来不错,但它不会在每个Web空间上都起作用。我想避免太多的外部包。你真的需要它在每个网站上工作吗?你有两个选择:你可以选择牺牲地球上每个人都可以开箱即用地运行你的代码的可能性,而不必解决别人已经为你解决的问题。。。或者,您可以牺牲您的时间使您的代码具有超级可移植性,并可能在这个过程中丢失一些头发。并不是你不能做你想做的事情,只是从这里开始事情会变得更复杂。我只是想帮你节省很多时间和精力。安装扩展插件很容易,你说得对。实际上,我试图避免使用扩展,但您的方式似乎很好。我试试看解析以下字符串怎么样?这是一个测试[url]google.com.hk[/url]和[img]abc.com/test.png[/img][/quote][/quote]是否有任何API可以使用java解析bbcode,特别是处理递归bbcode?我只想说,如果您使用bbcode的目的是允许标记而不引入xss漏洞,您不应该尝试编写自己的bbcode处理器。这似乎很难正确执行,而且您的代码已经充满了安全漏洞。我想我应该提到这一点,因为如果安全性不是问题,那么只允许html就更容易了。为此,您确实希望使用经过良好测试的第三方库。有很多。我会重新考虑如何编写自己的bbcode处理器。我没想到会这么广泛。谢谢
    <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);