假设我们的文本中包含多个网址,因此我想提取该网址并进行一些更改,然后显示文字。
这是我正在使用的代码
<?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]
所以如何申请在文本中找到所有链接〜谢谢
答案 0 :(得分:2)
您可以使用preg_match_all(...)
,它会返回一系列匹配项。然后循环结果($matches
)并替换找到的结果。
答案 1 :(得分: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);