模仿 PHP 中 Stack Overflow 的自动链接功能
Stack Overflow 的自动链接行为非常方便,让用户可以轻松链接到网站或帖子中的特定内容。本文探讨了如何在 PHP 中实现类似的功能,利用正则表达式模式来识别 URL 并将其转换为 HTML 链接。
要了解内部工作原理,让我们分解提供的代码:
<code class="php">/** * Replace links in text with html links * * @param string $text * @return string */ function auto_link_text($text) { // a more readably-formatted version of the pattern is on http://daringfireball.net/2010/07/improved_regex_for_matching_urls $pattern = '(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))'; $callback = create_function('$matches', ' $url = array_shift($matches); $url_parts = parse_url($url); $text = parse_url($url, PHP_URL_HOST) . parse_url($url, PHP_URL_PATH); $text = preg_replace("/^www./", "", $text); $last = -(strlen(strrchr($text, "/"))) + 1; if ($last < 0) { $text = substr($text, 0, $last) . "&hellip;"; } return sprintf(\'<a rel="nofollow" href="%s">%s</a>\', $url, $text); '); return preg_replace_callback($pattern, $callback, $text); }</code>
分解正则表达式模式:
正则表达式模式初始化贪婪搜索 (?i) 并查找以下段:
自定义回调函数:
回调函数构造 HTML 链接标记。它提取 URL,对其进行解析,从域中删除前导“www”,根据需要限制显示的 URL 文本,最后生成具有适当属性的锚标记。
示例输入和输出:
为了说明函数的操作,请考虑以下输入文本:
“这是我的文本。我想知道您是否知道如何在 StackOverflow 上提问:查看 https:// /m.sbmmt.com/link/6e212075e04d1616b06a5e1398e10053
还有base_convert php函数?
//m.sbmmt.com/link/63c0d1be32c9c7e2dee3ac21690e490c
https:// www。 php.cn/link/a995b410d5e76ed56523533b47e3786a"
auto_link_text()函数处理后的输出是:
"这是我的文字,不知道你是否知道在StackOverflow上提问:查看这是stackoverflow.com/questions/1925455/…
还有base_convert php函数?
pt.php.net/manual/en/…
通过实施这些技术,开发人员可以轻松地将 Stack Overflow 的自动链接功能合并到他们的 PHP 应用程序中,从而增强用户体验并简化作者和读者的内容引用。
以上是如何在 PHP 中实现 Stack Overflow 的自动链接功能?的详细内容。更多信息请关注PHP中文网其他相关文章!