首页  >  文章  >  后端开发  >  如何在 PHP 中实现 Stack Overflow 的自动链接功能?

如何在 PHP 中实现 Stack Overflow 的自动链接功能?

Linda Hamilton
Linda Hamilton原创
2024-11-04 11:35:02426浏览

How Can I Implement Stack Overflow's Auto-Link Functionality in PHP?

模仿 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) . "&amp;hellip;";
        }

        return sprintf(\'<a rel="nofollow" href="%s">%s</a>\', $url, $text);
    ');

    return preg_replace_callback($pattern, $callback, $text);
}</code>

分解正则表达式模式:

正则表达式模式初始化贪婪搜索 (?i) 并查找以下段:

  • 协议: a-z :
  • 域名: wwwd{0,3}[.]|[a-z0-9.-] .{2,4}
  • 路径: /(?:1 |((2 |((3 )))) ) (?:((4 |((5 ))))|6 ))

自定义回调函数:

回调函数构造 HTML 链接标记。它提取 URL,对其进行解析,从域中删除前导“www”,根据需要限制显示的 URL 文本,最后生成具有适当属性的锚标记。

示例输入和输出:

为了说明函数的操作,请考虑以下输入文本:

“这是我的文本。我想知道您是否知道如何在 StackOverflow 上提问:查看 https:// /www.php.cn/link/6e212075e04d1616b06a5e1398e10053

还有base_convert php函数?
https://www.php.cn/link/63c0d1be32c9c7e2dee3ac21690e490c

https:// www。 php.cn/link/a995b410d5e76ed56523533b47e3786a"

auto_link_text()函数处理后的输出是:

"这是我的文字,不知道你是否知道在StackOverflow上提问:查看这是stackoverflow.com/questions/1925455/…

还有base_convert php函数?
pt.php.net/manual/en/…

pt.php.net/manual/en/…"

通过实施这些技术,开发人员可以轻松地将 Stack Overflow 的自动链接功能合并到他们的 PHP 应用程序中,从而增强用户体验并简化作者和读者的内容引用。


  1. s()<>
  2. s()< >
  3. s()<>
  4. s()
  5. s()<>
  6. s`!()[]{};:'".,<>?«»“”' '

以上是如何在 PHP 中实现 Stack Overflow 的自动链接功能?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn