检测文本中的 URL 并将其转换为 HTML 链接
在各种在线应用程序中,将文本中提到的 URL 转换为可点击的链接是常见要求。让我们探索如何在 PHP 中完成此任务。
要求
解决方案
基于正则表达式的方法
让我们创建一个匹配的正则表达式有效的 URL 及其组成部分部分:
$rexProtocol = '(https?://)?'; $rexDomain = '((?:[-a-zA-Z0-9]{1,63}\.)+[-a-zA-Z0-9]{2,63}|(?:[0-9]{1,3}\.){3}[0-9]{1,3})'; $rexPort = '(:[0-9]{1,5})?'; $rexPath = '(/[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]*?)?'; $rexQuery = '(\?[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]+?)?'; $rexFragment = '(#[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]+?)?'; $rex = "&\b$rexProtocol$rexDomain$rexPort$rexPath$rexQuery$rexFragment(?=[?.!,;:\"]?(\s|$))&";
实现
我们可以使用 preg_match_all() 查找文本中的所有 URL 匹配:
preg_match_all($rex, htmlspecialchars($text), $matches, PREG_OFFSET_CAPTURE);
转换为 HTML链接
我们将循环匹配并创建适当的 HTML 链接:
foreach ($matches[0] as $match) { $url = $match[0]; $domain = $matches[2][0]; $path = $matches[4][0]; $completeUrl = $matches[1][0] ? $url : "http://$url"; $htmlLink = "<a href='$completeUrl'>$domain$path</a>"; $text = str_replace($url, $htmlLink, $text); }
此方法可以有效处理大多数 URL 格式,同时保持针对 XSS 攻击的安全性。
以上是如何在 PHP 中检测 URL 并将其转换为 HTML 链接?的详细内容。更多信息请关注PHP中文网其他相关文章!