不能直接用正则全局替换url,因富文本中存在html标签、引号内url、已有标签及markdown链接,易导致重复包裹或结构破坏;须用golang.org/x/net/html解析dom,仅处理纯文本节点,跳过等标签内容,并排除mailto:/tel:/javascript:伪协议。

为什么不能直接用正则替换所有 http/https 字符串
因为富文本里可能混着 HTML 标签、引号包裹的 URL(如 @#@#@#@#@#@#@#@#@#@0
html.EscapeString(linkText),URL 字符串保持原样传入 href
<script></script> 等危险标签,应在解析前用 bluemonday 等库清洗,而不是靠链接转换兜底真正麻烦的是混合场景:一段文本里既有用户输入的 URL,又有 CMS 后台插入的已转义 HTML。这时候得先统一解码再处理,顺序错一步就 XSS。
func transformText(n *html.Node) {
if n.Type == html.TextNode {
text := n.Data
// 用 regexp.MustCompile(`(?U)\bhttps?://\S+\b`) 匹配 URL
// 注意:\S+ 可能吞掉末尾标点,建议用更保守的 (?golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











