-1

假设我们的文本中包含多个 url,所以我想提取该 url 并进行一些更改,然后显示文本。

这是我正在使用的代码

<?PHP
$text = "This is text with links http://google.com and www.yahoo.com";

$text = ereg_replace( "www\.", "http://www.", $text );
$text = ereg_replace( "http://http://www\.", "http://www.", $text );
$text = ereg_replace( "https://http://www\.", "https://www.", $text );

$reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";

if(preg_match($reg_exUrl, $text, $url)) {

$text = preg_replace($reg_exUrl, '<a href="'.$url[0].'" rel="nofollow">'.$url[0].'</a>', $text);
echo $text;

}else{

echo "NO URLS";

}
?>

问题

// 输出源(重复第一个链接)

This is text with links <a href="http://google.com" rel="nofollow">http://google.com</a> and <a href="http://google.com" rel="nofollow">http://google.com</a>

它取决于数组,所以它只需要第一个 URL $url[0],所以我如何申请在文本中找到的所有链接〜谢谢

4

2 回答 2

2

您可以使用preg_match_all(...),它返回一个匹配数组。然后循环遍历结果 ( $matches) 并替换找到的事件。

于 2012-05-11T18:22:06.980 回答
0

更改下一行

$reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";

$reg_exUrl = "/((http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?)/";

$text = preg_replace($reg_exUrl, '<a href="'.$url[0].'" rel="nofollow">'.$url[0].'</a>', $text);

$text = preg_replace($reg_exUrl, '<a href="\1" rel="nofollow">\1</a>', $text);
于 2012-05-11T18:38:37.187 回答