反正是有转换纯文本的URL为HTML在PHP的超链接?我需要转换以下类型的URL:
http://example.com
http://example.org
http://example.gov/
http://example.com?q=sometext&opt=thisandthat
http://example.com#path
http://example.com?q=querypath#path
http://example.com/somepath/index.html
https://example.com/
https://example.org/
https://example.gov/
https://example.com?q=sometext&opt=thisandthat
https://example.com#path
https://example.com?q=querypath#path
https://example.com/somepath/index.html
http://www.example.com/
http://www.example.org/
http://www.example.gov/
http://www.example.com?q=sometext&opt=thisandthat
http://www.example.com#path
http://www.example.com?q=querypath#path
http://www.example.com/somepath/index.html
https://www.example.com/
https://www.example.org/
https://www.example.gov/
https://www.example.com?q=sometext&opt=thisandthat
https://www.example.com#path
https://www.example.com?q=querypath#path
https://www.example.com/somepath/index.html
www.example.com/
www.example.org/
www.example.gov/
www.example.com?q=sometext&opt=thisandthat
www.example.com/#path
www.example.com?q=querypath#path
www.example.com/somepath/index.html
example.com/
example.org/
example.gov/
example.com?q=sometext&opt=thisandthat
example.com/#path
example.com?q=querypath#path
example.com/somepath/index.html
如何通过一个正则表达式运行它们像下面来重新激活Twitter的链接 -
如果你只是需要将单个URL,这是相当容易:
function makeLink($url)
{
return '<a href="' . htmlspecialchars($url) . '">' . htmlspecialchars($url) . '</a>';
}
对于出现在一个较大的文本块,例如网址用户的意见,看这个问题:
试试这个功能。这将使链接文本是否以http或www开头。 example.com将无法正常工作。
function linkable($text = ''){
$text = preg_replace("/\s+/", ' ', str_replace(array("\r\n", "\r", "\n"), ' ', $text));
$data = '';
foreach( explode(' ', $text) as $str){
if (preg_match('#^http?#i', trim($str)) || preg_match('#^www.?#i', trim($str))) {
$data .= '<a href="'.$str.'">'.$str.'</a> ';
} else {`enter code here`
$data .= $str .' ';
}
}
return trim($data);
}
呃,他们包装在一个锚标记?
function linkify($url) {
return '<a href="' . $url . '">' . $url . '</a>';
}
这是我用来做一个小的论坛上,我做同样的事情。一般来说,我通过它运行整个评论像echo makeLinks($forumpost['comment']);
function makeLinks($str) {
return preg_replace('/(https?):\/\/([A-Za-z0-9\._\-\/\?=&;%,]+)/i', '<a href="$1://$2" target="_blank">$1://$2</a>', $str);
}
这里是我做到了(与包括测试用例):
/**
* @see Inspired by https://css-tricks.com/snippets/php/find-urls-in-text-make-links/ and Example 1 of http://php.net/manual/en/function.preg-replace-callback.php
*
* @param string $text
* @return string
*/
public static function getTextWithLinksEnabled($text) {
$regex = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
return preg_replace_callback($regex, function ($matches) {
$fullMatch = $matches[0];
return "<a href='" . $fullMatch . "'>" . $fullMatch . "</a>";
}, $text);
}
测试:
public function testGetTextWithLinksEnabled() {
$this->assertEquals('[email protected]', StrT::getTextWithLinksEnabled('[email protected]'));//no links
$this->assertEquals('just plain text', StrT::getTextWithLinksEnabled('just plain text'));//no links
$this->assertEquals("here is a link <a href='https://stackoverflow.com/'>https://stackoverflow.com/</a> right here", StrT::getTextWithLinksEnabled('here is a link https://stackoverflow.com/ right here'));//one link
$this->assertEquals("here is a link <a href='https://stackoverflow.com/'>https://stackoverflow.com/</a> right here and another: <a href='https://css-tricks.com/snippets/php/find-urls-in-text-make-links/'>https://css-tricks.com/snippets/php/find-urls-in-text-make-links/</a>", StrT::getTextWithLinksEnabled('here is a link https://stackoverflow.com/ right here and another: https://css-tricks.com/snippets/php/find-urls-in-text-make-links/'));//2 links
}