我使用以下的函数来搜索文本链接并将它们转换为超链接。首先是正确的?它似乎工作,但你知道一个(可能畸形)的URL会打破这个功能?StackOverflow样式A Href在正则表达式中自动链接
我的问题是是否有可能得到这个支持端口号,例如stackoverflow.com:80/index
不会被转换,因为该端口不被视为url的有效部分。
因此,总的来说,我正在寻找Stackoverflow风格的网址识别,我相信这是对Markdown的自定义添加。
/**
* Search for and create links from urls
*/
static public function autoLink($text) {
$pattern = "/(((http[s]?:\/\/)|(www\.))(([a-z][-a-z0-9]+\.)?[a-z][-a-z0-9]+\.[a-z]+(\.[a-z]{2,2})?)\/?[a-z0-9._\/~#&=;%+?-]+[a-z0-9\/#=?]{1,1})/is";
$text = preg_replace($pattern, " <a href='$1'>$1</a>", $text);
// fix URLs without protocols
$text = preg_replace("/href='www/", "href='http://www", $text);
return $text;
}
感谢您的时间,
你的函数不适用于URL到子域名(例如'my.domain.com/mypage') – meagar
你想要的东西有多准确? [www.ca](http://www.ca)完全有效的网址,但不是您期望定期看到的网址。有很多东西是主机名,但绝对看起来不像一个。 –
理想情况下,覆盖所有可能性,但我怀疑任何人都会指向像www.ca这样的网址,看看堆栈溢出的效果如何,看起来非常好! –