PHP爆炸检测用户名

时间:2013-05-21 23:50:32

标签: php mysql twitter explode detect

我正在尝试构建一个PHP代码来检测类似Twitter的提及,但不是链接到@username,而是找到用户的ID并引用它。

function get_user_id_from_username($username) {
    $username = sanitise($username);
    return mysql_result(mysql_query("SELECT user_id FROM users WHERE user_sitename = '$username'"), 0, 'user_id');
}

$string = sanitise($_POST['updatetext']);
$explosion = explode("@", $string);
$count = count($explosion);

for($i = 0; $i < $count; $i++){
    $explosion2 = explode(" ", $explosion[$i]);
    $explosion2 = $explosion2[0];

    $username_id = get_user_id_from_username($explosion2);

    $string = str_replace("@{$explosion2}", "<a href='profile.php?id={$username_id}'>{$explosion2}</a>", $string);
}

我遇到的问题是只有在@username后面没有标点符号时才会检测到用户名,但是如果$ update等于“Hello @username,你还好吗?”查询将找不到等于“username”的用户名,因此会抛出错误。

一旦有任何标点存在,我有没有办法结束爆炸?所以,而不是$ explosion2等于“用户名”,它等于“用户名”?

3 个答案:

答案 0 :(得分:2)

不要使用explode,而是执行:

preg_match_all('/@[A-Za-z]+/',$string,$usernames);

这将为您提供一系列用户名$usernames,您可以将其循环以进行数据库查找。请注意,用户名将包含@ - 您需要在执行查找之前将其删除。

我假设用户名完全由字母组成 - 如果你想允许数字或其他字符只是相应地调整正则表达式。

答案 1 :(得分:0)

您可以使用PHP的trim()函数删除所有标点符号: http://php.net/manual/en/function.trim.php

即:

$explosion2 = trim($explosion2, ",.");

答案 2 :(得分:0)

你可以像这样使用它:

preg_split('/[.,;?!]/',$mystring);

其中mystring是用户输入的内容,可以在代码中添加[]之间的所有标点符号。或者你只需​​要替换字符串:

u can also remove the punctuations with preg_replace
preg_replace("/[^@[a-zA-Z 0-9]]+/", " ", $mystring);

然后获取链接并放置原始字符串中的标点符号...以及您可以想到的许多调整..