如何链接到一个string与PHP的url?

我有以下string:

"Look on http://www.google.com". 

我需要将其转换为:

“看看http://www.google.com ”

原始string可以有多个URLstring。

我如何在PHP中做到这一点?

谢谢

您可以使用以下内容:

 $string = "Look on http://www.google.com"; $string = preg_replace( "~[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]~", "<a href=\"\\0\">\\0</a>", $string); 

PHP版本<5.3(ereg_replace)否则(preg_replace)

lib_autolink做得不错,避免了HTML标签中的链接和链接之后的额外标点符号这样的陷阱:

https://github.com/iamcal/lib_autolink

看看正则expression式 。 你会做这样的事情:

 $text = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', '<a href="$1">$1</a>', $text); 

你将需要使用正则expression式…

像这样的东西将有所帮助。

 $result = preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[A-Z0-9+&@#\/%=~_|]/i', '<a href="\0">\0</a>', $text); 

尝试这个…

 <? function link_it($text) { $text= preg_replace("/(^|[\n ])([\w]*?)([\w]*?:\/\/[\w]+[^ \,\"\n\r\t<]*)/is", "$1$2<a href=\"$3\" >$3</a>", $text); $text= preg_replace("/(^|[\n ])([\w]*?)((www)\.[^ \,\"\t\n\r<]*)/is", "$1$2<a href=\"http://$3\" >$3</a>", $text); $text= preg_replace("/(^|[\n ])([\w]*?)((ftp)\.[^ \,\"\t\n\r<]*)/is", "$1$2<a href=\"ftp://$3\" >$3</a>", $text); $text= preg_replace("/(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+)+)/i", "$1<a href=\"mailto:$2@$3\">$2@$3</a>", $text); return($text); } $text = "ini link gue: http://sapua.com <br> https://sapua.com <br> anything1://www.sss.com <br> dua www.google.com <br> tiga http://www.google.com <br> ftp.sapua.com <br> someone@sapua.com "; print link_it($text); ?> 

我在http://code.seebz.net/p/autolink-php/find了这个代码,并稍微调整了一下以识别www。*作为链接。; 我不是很熟悉正则expression式,但我认为两个str_replace行可以修改为一个正则expression式

 <?php $text = 'First link is: www.example.com. Second link is http://example.com. Third link is https://example.com. Fourth link is http://www.example.com. Fifth link is <a href="http://www.example.com">www.example.com</a>'; function autolink($str, $attributes=array()) { $str = str_replace("http://www","www",$str); $str = str_replace("https://www","www",$str); $attrs = ''; foreach ($attributes as $attribute => $value) { $attrs .= " {$attribute}=\"{$value}\""; } $str = ' ' . $str; $str = preg_replace( '`([^"=\'>])((http|https|ftp)://[^\s<]+[^\s<\.)])`i', '$1<a href="$2"'.$attrs.'>$2</a>', $str ); $str = preg_replace( '`([^"=\'>])((www).[^\s<]+[^\s<\.)])`i', '$1<a href="http://$2"'.$attrs.'>$2</a>', $str ); $str = substr($str, 1); return $str; } echo autolink($text); ?> 

我发现了一个例子,它允许链接,包括ftp,https和其他似乎适用于多个URL的罚款

如何对检测的URL,在文本-转换到HTML链接使用正则expression式的PHP,

 <?php // The Regular Expression filter $pattern = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; //example text $text="Example user text with a URL http://www.zero7web.com , second link http://www.didsburydesign.co.uk"; // convert URLs into Links $text= preg_replace($pattern, "<a href=\"\\0\" rel=\"nofollow\">\\0</a>", $text); echo $text; ?> 

将nofollow添加到链接也是一个好主意,这是用户提交的价值。

正确地链接一个URL是不平凡的。 (更多关于为什么如此,请参阅: http : //www.codinghorror.com/blog/2008/10/the-problem-with-urls.html )我花了相当多的时间在这上面,有一个相当不错的解决scheme(无论是PHP和/或Javascript)。 请参阅: http : //jmrware.com/articles/2010/linkifyurl/linkify.html

检查我的linkify函数,它使用preg_replace_callback(仅PHP 5.3)。 它支持http,email和twitter:

http://www.jasny.net/articles/linkify-turning-urls-into-clickable-links-in-php/

 /** * Turn all URLs in clickable links. * * @param string $value * @param array $protocols http/https, ftp, mail, twitter * @param array $attributes * @param string $mode normal or all * @return string */ function linkify($value, $protocols = array('http', 'mail'), array $attributes = array(), $mode = 'normal') { // Link attributes $attr = ''; foreach ($attributes as $key => $val) { $attr = ' ' . $key . '="' . htmlentities($val) . '"'; } $links = array(); // Extract existing links and tags $value = preg_replace_callback('~(<a .*?>.*?</a>|<.*?>)~i', function ($match) use (&$links) { return '<' . array_push($links, $match[1]) . '>'; }, $value); // Extract text links for each protocol foreach ((array)$protocols as $protocol) { switch ($protocol) { case 'http': case 'https': $value = preg_replace_callback($mode != 'all' ? '~(?:(https?)://([^\s<]+)|(www\.[^\s<]+?\.[^\s<]+))(?<![\.,:])~i' : '~([^\s<]+\.[^\s<]+)(?<![\.,:])~i', function ($match) use ($protocol, &$links, $attr) { if ($match[1]) $protocol = $match[1]; $link = $match[2] ?: $match[3]; return '<' . array_push($links, '<a' . $attr . ' href="' . $protocol . '://' . $link . '">' . $link . '</a>') . '>'; }, $value); break; case 'mail': $value = preg_replace_callback('~([^\s<]+?@[^\s<]+?\.[^\s<]+)(?<![\.,:])~', function ($match) use (&$links, $attr) { return '<' . array_push($links, '<a' . $attr . ' href="mailto:' . $match[1] . '">' . $match[1] . '</a>') . '>'; }, $value); break; case 'twitter': $value = preg_replace_callback('~(?<!\w)[@#](\w++)~', function ($match) use (&$links, $attr) { return '<' . array_push($links, '<a' . $attr . ' href="https://twitter.com/' . ($match[0][0] == '@' ? '' : 'search/%23') . $match[1] . '">' . $match[0] . '</a>') . '>'; }, $value); break; default: $value = preg_replace_callback($mode != 'all' ? '~' . preg_quote($protocol, '~') . '://([^\s<]+?)(?<![\.,:])~i' : '~([^\s<]+)(?<![\.,:])~i', function ($match) use ($protocol, &$links, $attr) { return '<' . array_push($links, '<a' . $attr . ' href="' . $protocol . '://' . $match[1] . '">' . $match[1] . '</a>') . '>'; }, $value); break; } } // Insert all link return preg_replace_callback('/<(\d+)>/', function ($match) use (&$links) { return $links[$match[1] - 1]; }, $value); }