我正在为网站的评论部分工作,用户可以引用其他用户说的内容。这是论坛上的基本“引用”按钮。
使用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>
答案 0 :(得分: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]。
答案 1 :(得分: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
}
答案 2 :(得分:0)
不,论坛通常使用以下格式:
<div><strong>username</strong> said:</div>
<blockquote>
some sentence
</blockquote>