0

我正在开发一个网站的评论部分,用户可以在其中引用其他用户所说的话。这是您在论坛上的基本“引用”按钮。

为此使用 BBcode。但不确定如何完成结果。

这个功能通常是怎么做的?

我可以有

[quote=username] some sentence [/quote]

理想情况下将转换为

<blockquote>username said:
some sentence
</blockquote>

截至目前,我有一个代码可以转换

"[quote=username] ... [/quote]"
 into
 <blockquote> ... </blockquote>

但我失去了用户名

这是我正在使用的代码

// output user comment
echo parse_quote( $row['user_comment'] );


// and this is the function to parse the quote

function parse_quote($str) {
    $str = preg_replace("/\[quote=[\w\s\-\W][^\]]{1,}\]/", "<blockquote>:", $str);  
    $str = preg_replace("/\[\/quote\]/", "</blockquote>", $str);
    return $str;
}

所以简而言之,论坛引用通常是如何完成的......它是正确的方式吗?如果是这样,我该如何转换

[quote=username] some sentence [/quote]

进入

<blockquote>username said:
some sentence
</blockquote>
4

3 回答 3

2

尝试将其更改为:

function parse_quote($str) {
    $str = preg_replace("/\[quote=([^\]]+)\]/", "<blockquote>$1 said:", $str);  
    $str = preg_replace("/\[\/quote\]/", "</blockquote>", $str);
    return $str;
}

如果您想允许人们在不指定用户名的情况下引用,则需要进行更多修改,例如 [quote]some text[/quote]。

于 2009-08-28T03:28:51.097 回答
1

好吧,我要建议的一件事是,您希望避免多次通过文件,PHP 提供了一种相当方便的方法,使用preg_replace_callback()

function process_codes($str) {
  return preg_replace_callback('!\[(.+?)\]!', 'process_code', $str);
}

function process_code($matches) {
  if ($matches[1] == '/quote') {
    return '</blockquote>';
  } else if (preg_match('!quote\s*=\s*(.+?)!', $matches[1], $args)) {
    return "<blockquote>$args[1] said:<br><br>";
  }
  // etc
}
于 2009-08-28T03:31:38.377 回答
0

不,论坛一般使用以下格式:

<div><strong>username</strong> said:</div>
<blockquote>
some sentence
</blockquote>
于 2009-11-03T12:02:09.970 回答