我目前正在开发一个论坛。在线程中,我希望用户能够在自己的帖子中引用其他帖子。它到目前为止工作,我唯一的问题是引号内的引号。
这是我的PHP代码:
<?php
$text = preg_replace_callback('/\[quote=([^]]+);([0-9]+)\]([^]]+)\[\/quote\]/i', function($matches){
// Include MySQLi into function
global $DB;
$get = $DB->query("SELECT quote.date, quote.text, user.username FROM forum AS quote INNER JOIN users AS user ON quote.userid = user.id WHERE quote.id = '".beforeDB($matches[2])."'");
$row = $get->fetch_array();
if($get->num_rows == 0)
return "";
$return = '
<div class="box table">
<table width="100%">
<tr style="height: 22px;"><td style="width: 122px; background: #e8e8e8;"><div style="font-weight: bold; padding-top: 5px; '.(userColor($row['username']) != false ? 'color: '.userColor($row['username']).';' : '').'">'.$row['username'].'</div></td><td style="background: #e8e8e8; padding-left: 5px;">'.dateFunction($row['date'], true, true, true).'</td></tr>
<tr><td colspan="2" style="border-top: 1px solid #aaaaaa; background: #efefef; padding: 3px;">'.$row['text'].'</td></tr>
</table>
</div>
';
return $return;
}, $text);
?>
正如我先前所说,这是工作。论坛表存储了帖子和帖子。
如果我在帖子中写这个,但它不起作用:
[quote=Admin;1]Hi guys![/quote]
[quote=Admin;1]Hi guys!
[quote=Mod;3]Whats up?[/quote][/quote]
使用上面的BB代码,第一个和第二个引用正在起作用。但是,报价中的报价不起作用。我该如何解决这个问题?
答案 0 :(得分:0)
我不完全确定你的帖子中有什么要找,但也许你可以使用这样的东西来获取引号之间的内容。
~\[quote=.*?\](.*)\[/quote\]~i
这将返回:
Whats up?[/quote]
这应该适用于模式的单个实例,但是如果您可以拥有多个实例,则可能需要包含否定前瞻,以确保在[/quote]
后不会直接显示[/quote]
~\[quote=.*?\].*?\[/quote\](?!\[/quote\])~i
Here is an example for you to tinker around with.
我想如果你有一个像[/quote][/quote]
这样的字符串会有效,但是如果你在这些标签之间有某些东西就行不通。 [/quote] sdf [/quote]
。这就是为什么我添加了删除任何剩余[/quote]
标记的链接。
希望这样的事情就是你所追求的。