3

您好,我需要在 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 @username 周围包装了一个链接,如下所示:

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

如何编辑其中的正则表达式部分以在出现的推文中的 url 周围放置一个标签?

4

1 回答 1

9

试试下面的代码:

$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/[alnum-chars]。

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

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

我在 PHP5.3 上对此进行了测试,它适用于您指定的 URL。

于 2012-03-23T15:00:07.450 回答