如何用字符串中的链接替换用户名?

时间:2018-03-19 02:37:24

标签: php

我尝试使用@username检查帖子是否提及其他用户。我想用一个指向用户个人资料的链接替换它。

这就是我所得到的......我没有任何错误,但是用户名只是在没有链接的情况下以文本形式出现。我觉得$ getUsers / $ gU并没有将结果返回给$ checkString,但我看不出有什么不对。

function post()
{
  global $me;

  if($_POST['message'])
  {
    $getUsers = mysql_query("SELECT user_id, user_name FROM users");
    while($gU = mysql_fetch_array($getUsers))
    {
      $checkString = strpos($_POST['message'], "@".$gU['user_name']."");
      if($checkString !== false)
      {
        $replaceFrom = "@".$gU['user_name']."";
        $replaceTo = "<a href=\'/user.php?id=".$gU['user_id']."\'>".$gU['user_name']."</a>";
        $checked = str_replace($replaceFrom, $replaceTo, $_POST['message']);
      }
      else
      {
        $checked = $_POST['message'];
      }
    }
    mysql_query("INSERT INTO test_table VALUES ('', '".$me['user_id']."', '".$_POST['topic']."', '".$checked."', UNIX_TIMESTAMP())");
    index();
  }
  else {
    echo "
    <form action='?action=insert' method='post'>
    <input type=text name=topic maxlength=40>
    <br><textarea name=message cols=80 rows=9></textarea>
    <br><input type='submit' STYLE='color: black;  background-color: white;' value='Submit' class='btn'>
    </form>
    ";
  }
}

2 个答案:

答案 0 :(得分:0)

mysql_query("INSERT INTO test_table VALUES ('', '".$me['user_id']."', '".$_POST['topic']."', '".$_POST['message']."', UNIX_TIMESTAMP())");

应该是

   mysql_query("INSERT INTO test_table VALUES ('', '".$me['user_id']."', '".$_POST['topic']."', '".$checked."', UNIX_TIMESTAMP())");

由于您的用户表最终会增长,我建议您通过搜索@(\ w +)来编译一组潜在的用户名,准备一个查找该用户名的语句,迭代结果并替换每个返回的行的所有实例与链接。

答案 1 :(得分:0)

我认为您可以通过排除MySQL部分来简化您的问题。根据我的理解,您正试图用HTML锚标记替换用户提及。

您可以使用preg_replace_callback()检查系统中是否存在任何已标记的用户,而不是遍历所有可用用户。

请查看下面的示例代码。为简化起见,我创建了两个函数。如果用户存在,parseTag()将注入HTML锚链接,否则将保留原始标记。 getUserId()将返回系统中存在的用户ID:

<?php

function parseTag($tagInfo){
    list($fullTag, $username) = $tagInfo;

    $uid = getUserId($username);

    if  ($uid) {
        return "<a href='/url/to/user/{$uid}'>{$fullTag}</a>";
    }

    return $fullTag;

}

function getUserId($username){
    $userList = [null, 'john', 'mary'];

    return array_search($username, $userList);
}

$comment = "Hello @john, @doe does not exists";

$htmlComment = preg_replace_callback("/@([\w]+)/", "parseTag", $comment);

echo $htmlComment;

输出:

 Hello <a href='/url/to/user/1'>@john</a>, @doe does not exists