【问题标题】:PHP: how to replace a bbcode-quote with extended data (recursive)?PHP:如何用扩展数据(递归)替换 bbcode-quote?
【发布时间】: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);

问题

  1. 如何递归替换这些东西?也许是preg_replace_callback
  2. 我的第 4 点“bbcode to html”的正则表达式是什么?

我有点困惑。你会如何解决这个问题?

提前致谢!

【问题讨论】:

  • 我只想说,如果你使用bbcode的目的是允许标记而不引入xss漏洞,你不应该尝试编写自己的bbcode处理器。正确地做到这一点看似困难,而且您的代码已经充满了安全漏洞。我想我会提到这一点,因为通常如果安全不是问题,只允许 html 会更容易。
  • ^^ 就是这样。您真的想为此使用经过良好测试的第三方库。有很多
  • 我将重新考虑编写自己的 bbcode 处理器。我没想到会那么广泛。谢谢!

标签: php recursion replace bbcode


【解决方案1】:

您可以随时使用bbcode extension in PHP 为您处理此问题。

【讨论】:

  • 看起来不错,但它不适用于每个网络空间。我想避免过多的外部包。
  • 您真的需要它在每个网络空间上工作吗?您有两个选择:您可以选择牺牲地球上每个人都可以开箱即用地运行您的代码的可能性,并为了方便而不必解决其他人已经为您解决的问题......或者,您可以牺牲你的时间让你的代码超级便携,并且在这个过程中可能会失去一些头发。并不是你不能做你想做的事,只是它只会从这里变得更加复杂。我只是想为您节省大量时间和精力。安装扩展非常容易
  • 我知道,你是对的。我实际上尽量避免使用扩展,但你的方式似乎是一个好方法。我会试试看。 :)
  • 解析以下字符串怎么样? [quote][quote] 这是一个测试 [url] google.com.hk [/url] 和 [img] abc.com/test.png [/img] [/quote][/quote] 有没有API使用 java 解析 bbcodes 尤其是处理递归 BBCodes ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 2012-05-21
  • 2023-03-18
  • 1970-01-01
  • 2018-01-11
  • 2011-10-10
  • 2011-05-09
相关资源
最近更新 更多