PHP用户标记系统

时间:2014-07-07 01:29:30

标签: php regex

所以我在做研究时并没有真正在网上找到关于这个主题的任何内容。基本上我想做的就是让人们在帖子中“标记”其他用户。喜欢

@Bob, SO is a great place!

然后,一旦我知道用户名被标记并且我通知用户,我就会处理通知。所以我的问题是如何处理这个问题。我正在尝试实现像Twitters标记系统之类的东西,如果你点击标签它会带你到用户配置文件。我会使用正则表达式并清除@?中的用户名吗?他们的任何库是否更容易?任何援助都会很棒。

3 个答案:

答案 0 :(得分:2)

您可以使用textntag插件进行@或#标记其完全可编辑的核心文件可以根据您的具体需求进行简单编辑。 http://daniel-zahariev.github.io/jquery-textntags

答案 1 :(得分:0)

整个逻辑就在于这几行。找到帖子上的所有@names,在您的数据库中查找他们的电子邮件并向他们发送通知。

<?php

$id = 551; // id of this post which is unique
$post = "@Bob, SO is a great place! Even @John is here"; // post content
$pattern = '/@([a-zA-Z0-9]+)/'; // the pattern to extract all nicknames (without @)
preg_match_all($pattern, $post, $matches);

// let's select all these users in order to retrieve their emails
$query = "SELECT nickname, email FROM users WHERE nickname IN ('" . implode("', '", $matches[1]) . "')";
$results = $mysqli_query($query);

while($row = $mysqli_fetch_array($results, MYSQLI_ASSOC)){
    // send an email and a link to the post where he/she has been tagged / mentioned 
    mail($row["email"], "Subject", "Hello " . $row["nickname"] . " someone tagged you. <a href='http://domain/posts/" . $id . "'>Take a look</a>");    
}

?>

答案 2 :(得分:0)

在没有@的情况下获取@username的正则表达式是:

(?<=@)[\p{L}\p{N}]+

此正则表达式假定用户名仅包含unicode字母字符和数字。 它也适用于德国变音符号:Ü,ü,Ä,ä,Ö,ö,ß