【发布时间】:2011-08-23 17:09:26
【问题描述】:
我正在使用 below 功能来搜索文本链接并将它们转换为超链接。首先它是否正确?它似乎可以工作,但您知道会破坏此功能的(可能是格式错误的)网址吗?
我的问题是是否有可能让它也支持端口号,例如 stackoverflow.com:80/index 不会被转换,因为端口不被视为 url 的有效部分。
所以总而言之,我正在寻找 Stackoverflow 风格的 url 识别,我相信这是对 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) -
您希望事情有多准确? www.ca 完全有效的网址,但不是您希望经常看到的网址。有很多东西是主机名,但绝对不像一个。
-
理想情况下涵盖所有可能性,但我怀疑有人会指向像 www.ca 这样的网址,看看堆栈溢出的工作原理会很有趣,它看起来非常好!
-
@Pez:Stack Overflow 使用 MarkdownSharp 和“Stack Exchange 添加”:stackoverflow.com/editing-help。对于 PHP,原 Markdown 项目推荐 Michel Fortin 的 PHP Markdown 端口。