像Twitter一样动态替换@和#


Dynamically replacing @ and # like Twitter

对于我基于 Larawel 的网站,我需要在文本内容中找到@#,并将其替换为 URL,例如指向用户 Twitter 页面的 URL。 我怎样才能:

  • 在 HTML 的文本部分中可靠地找到这些字符串
  • 将找到的实例替换为 URL

它的代码非常庞大。你将不得不在这里使用ajax,在textarea/textbox中,你必须使用"onkeyup"事件,每个按下的键都必须与"@"或"#"进行比较,然后必须在数据库中搜索"@"之后的下一个字符。因此,让我们看到用户到目前为止已经键入了"@A",并且用户的目标是键入"@Ankur"然后一旦键入了"A",ajax 脚本将开始在数据库中搜索用户,并使用名称、url 进行检索,您只需要在屏幕上回显它。

这就是

你要找的.. https://stackoverflow.com/a/4277114/829533

$strTweet = preg_replace('/(^|'s)#('w*[a-zA-Z_]+'w*)/', ''1#<a href="http://twitter.com/search?q=%23'2">'2</a>', $strTweet);

而 https://stackoverflow.com/a/4766219/829533

$input = preg_replace('/(?<=^|'s)@([a-z0-9_]+)/i', '<a href="http://www.twitter.com/$1">@$1</a>', $input);

使用正则表达式,它相当简单。我会创建一个接受前缀和替换的函数,就像这样。

function tweetReplaceObjects($input, $prefix, $replacement) {
    return preg_replace("/$prefix([A-Za-z0-9_-])/", $replacment, $input);
}

一个示例用法是这样的。

$text = 'hey look, it''s @stackoverflow over there';
// expected output:
// hey look, it's <a href="http://www.twitter.com/stackoverflow">stackoverflow</a> over there
echo tweetReplaceObjects($text, '@', '<a href="http://www.twitter.com/$1">$1</a>');