用php在推文中的链接周围包装一个标签


Wrap an a tag around a link in a tweet with php

你好,我需要在php中的推文中的链接周围添加一个href标记,例如,如果我有这样的推文:

@username tweet body message http://t.co/sfr34s5

我需要用php:把它变成这个

@username tweet body message <a href="http://t.co/sfr34s5">http://t.co/sfr34s5</a>

我认为这可以使用preg_replace来完成,我有类似的东西,它已经在twitter@用户名周围包装了一个链接,如下所示:

$tweet= preg_replace('/@([a-z0-9_]+)/i', '<a href="http://twitter.com/$1" target="_blank">@$1</a>', $tweet);

我如何编辑其中的regex部分,以便在出现的tweet中的url周围添加一个标签?

尝试以下代码:

$source = '@username tweet body message http://t.co/sfr34s5';
$pattern = '/(http:'/'/[a-z0-9'.'/]+)/i';
$replacement = '<a href="$1" target="_blank">$1</a>';
$source = preg_replace($pattern, $replacement, $source); 

正则表达式将匹配所有以"http://"开头、后跟一系列字母数字值、正斜杠或句点的字符串。

它应该在所有情况下都有效,然而,如果你只是试图提取t.co链接,你可以使用这个更安全的模式版本:

$pattern = '/(http:'/'/t'.co'/[a-z0-9]+)/i';

这将只匹配'http://t.co/[铝字符]。

如果需要匹配所有URL,则必须根据需要修改模式。例如匹配http://t.co/abcde?x=1&y=2,则需要使用以下模式:

$pattern = '/(http:'/'/[a-z0-9'.'/?=&]+)/i';

我在PHP5.3上测试了这个,它与您指定的URL一起工作。