我有一个脚本可以将评论中的所有BBCODES替换为HTML。
我已设法转换除用户名代码[user="max"]
之外的所有简单代码,因为我需要获取更多用户信息,例如用户信誉和用户信息。来自数据库的用户在线状态。
$bbextended = array(
"/\[url](.*?)\[\/url]/i" => "<a href=\"http://$1\" title=\"$1\">$1</a>",
"/\[user=(.*?)\]/i" => "<div class=\"user\"> <a href=\"/user/$1\" title=\"$1\">$1</a><span> $USER REPUTATION </span></div>",
);
foreach($bbextended as $match=>$replacement){
$bbtext = preg_replace($match, $replacement, $bbtext);
}
由于preg_replace
替换了其函数内的匹配项,我无法获取用户名以从数据库中获取其他用户信息。
答案 0 :(得分:1)
如果您使用preg_replace_callback
,您会发现可以大规模扩展您的BBCode库。
示例:
$bbextended = array(
"/\[url](.*?)\[\/url]/i" => "<a href=\"http://$1\" title=\"$1\">$1</a>",
"/\[user=(.*?)\][\/url]/i" => function($m) {
$foo = "bar";
return "<div class=\"user\" <a href=\"/user/".$m[1]."\" title=\"".$m[1]."\">"
.$m[1]."</a><span> ".$foo." </span></div>";
}
);
foreach($bbextended as $match=>$replacement){
if( is_callable($replacement)) {
$bbtext = preg_replace_callback($match, $replacement, $bbtext);
}
else {
$bbtext = preg_replace($match, $replacement, $bbtext);
}
}