我想用 SQL 选择编写一个 bbcode。基本上我希望用户能够[user]Anotheruser[/user]
在文本字段中输入,然后在前端将其转换为如下所示的 URL http://mydomain.com/user/[userid]/anotheruser
:. 因此,为了获取用户 ID,我需要包含一个 SQL 选择,另外还有一个 if else 以找出其他用户实际存在。我可以使用preg_replace
通常用于创建 bbcode 的 a 来执行此操作,还是需要做一些更复杂的事情?
问问题
494 次
3 回答
0
preg_match
the tag first, get the user name, execute the query (be careful and make that step safe!) and replace the whole matched string with the new url:
preg_match_all ( '#\[user\](.*?)\[/user\]#i', $text, $matches, PREG_SET_ORDER );
for ( $i = 0, $j = count( $matches ); $i < $j; $i++ )
{
$userName = $matches[$i][1];
$userId = 0;
// query example with mysqli
$stmt = $sql->prepare( 'SELECT uid FROM users WHERE username = ? LIMIT 1' );
$stmt->bind_param( 's', $userName );
$stmt->execute();
$stmt->bind_result( $userId );
if ( $stmt->fetch() )
{
$text = str_replace( $matches[$i][0], "<a href=\"/user/$userId/$userName\" title=\"$userName\">$userName</a>", $text );
}
}
于 2010-05-10T10:12:15.973 回答
0
pre_replace 应该可以工作,但要小心。确保修补任何漏洞...特别注意 sql 注入。
于 2010-05-10T09:33:07.767 回答
0
您应该避免在 POST 端进行注射,就像您在其他任何地方都应该做的那样。
这种情况根本没有什么不同。
于 2010-05-10T09:49:58.350 回答