动态取代@和#像Twitter一样

时间:2013-10-08 05:41:32

标签: php regex

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

  • 在HTML
  • 的文本部分中可靠地找到这些字符串
  • 使用网址替换找到的实例

3 个答案:

答案 0 :(得分:1)

它的代码是巨大的。你必须在这里使用ajax,在textarea / textbox中你必须使用“onkeyup”事件,每个按下的键必须与“@”或“#”进行比较然后“@”之后的下一个字符必须是在数据库中搜索。 所以让我们看到用户输入“@A”直到现在,并且用户打算键入“@Ankur”然后只要输入“A”,ajax脚本就会开始搜索数据库中的用户并使用名称检索它,网址,你只需要在屏幕上回显它。

答案 1 :(得分:0)

这就是你要找的...... 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);

答案 2 :(得分:0)

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

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>');