
本文介绍使用 Go 标准库 html.UnescapeString 函数,安全、高效地将 HTML 实体(如
本文介绍使用 go 标准库 `html.unescapestring` 函数,安全、高效地将 html 实体(如 `
在 Go 开发中,常会遇到从外部接口、数据库或 CMS 获取的 HTML 内容已被双重转义(例如 变成 <code>,<code>" 变成 "),导致无法直接渲染或解析。你提供的示例:
test1 := `<iframe src="https:%5C/%5C/www.disnei.com%5C/embed%5C/44bc40f3bc04f65b7a35" frameborder="0" width="100%" height="340" scrolling="no" allowfullscreen>`</iframe>
其中不仅包含标准 HTML 实体(、<code>"),还混有 JSON/JS 风格的反斜杠转义(如 /)。注意:html.UnescapeString 仅负责 HTML 实体解码,不处理通用字符串转义(如 / → / 或 \ → )。因此需分步处理:
✅ 正确做法(推荐):
- 先用
html.UnescapeString解码 HTML 实体; - 若存在额外的 JSON/JS 转义(如
/),再配合strings.ReplaceAll或strconv.Unquote(需补全引号)谨慎清理。
示例代码如下:
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
package main
import (
"fmt"
"html"
"strings"
)
func main() {
test1 := `<iframe src="https:%5C/%5C/www.disnei.com%5C/embed%5C/44bc40f3bc04f65b7a35" frameborder="0" width="100%" height="340" scrolling="no" allowfullscreen>`
// Step 1: 解码 HTML 实体
unescaped := html.UnescapeString(test1)
fmt.Println("HTML 解码后:")
fmt.Println(unescaped)
// 输出:<iframe src="https:%5C/%5C/www.disnei.com%5C/embed%5C/44bc40f3bc04f65b7a35" ...>
// Step 2: 清理多余的 JSON 风格反斜杠(仅当确认安全时)
cleaned := strings.ReplaceAll(unescaped, `/`, `/`)
fmt.Println("
进一步清理 / 后:")
fmt.Println(cleaned)
// 输出:<iframe src="https://www.disnei.com/embed/44bc40f3bc04f65b7a35" ...>
}</iframe></iframe></iframe>
⚠️ 注意事项:
-
html.UnescapeString是标准库函数,无需引入第三方依赖,且已针对 XSS 做基础防护(如不解析危险实体javascript:),但它不执行 HTML 标签过滤或 Sanitization —— 若输入不可信,务必在解码后使用golang.org/x/net/html或bluemonday等库进行白名单清洗。 - 不要使用正则或手动字符串替换替代
html.UnescapeString,因其需正确处理嵌套实体、十进制/十六进制编码(如、<code>)及命名实体(如 <code>)。 - 反斜杠问题(如
/)通常源于 JSON 序列化过程,最佳实践是在数据源头避免双重转义;若必须处理,优先明确转义规则,避免过度ReplaceAll引入误伤。
总结:html.UnescapeString 是 Go 中解码 HTML 实体的标准、可靠方案;结合上下文对特殊转义做针对性清理,即可安全还原出可渲染或解析的原始 HTML 字符串。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










