2009-08-28 51 views
0

我正在研究网站的评论部分,用户可以引用其他用户说的内容。这是您在论坛上的基本“报价”按钮。在论坛中引用用户

使用BBcode。但不知道如何完成结果。

该功能通常如何完成?

我可以有

[quote=username] some sentence [/quote] 

这将理想地被转换为

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

截至目前,我有转换

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

的码,但我失去的用户名

这个我s我正在使用的代码

// 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> 

回答

2

尝试将其更改为类似:

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

多一点的修改将被要求如果要允许人们报价没有指定用户名,如[quote]一些文字[/ quote]。

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 
} 
0

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

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