gpt4 book ai didi

使用 Golang 进行 HTML 验证

转载 作者:IT王子 更新时间:2023-10-29 01:59:22 26 4
gpt4 key购买 nike

在我的 API 中,我有一个 POST 端点。发布到该端点的预期参数之一是一段(松散的)有效 HTML。

POST 将采用 JSON 格式。

在 golang 中,我如何确保发布的 HTML 有效?我已经找了好几天了,还是没找到?

“有效”一词有点松散。我试图确保打开和关闭标签、语音标记位于正确的位置等。

最佳答案

游戏有点晚了,但是这里有几个 Go 中的解析器,如果您只想验证 HTML 的结构(例如,您不关心 div 是否在 span 内,这将起作用)不允许,但它是模式级别的问题):

x/网络/html

golang.org/x/net/html 包包含一个非常松散的解析器。几乎任何东西都会生成有效的 HTML,类似于许多 Web 浏览器尝试做的事情(例如,在许多情况下它会忽略未转义值的问题)。例如,类似 <span>></span> 的内容可能会验证(我没有检查这个特定的,我只是编造的)作为其中包含“>”字符的范围。

可以这样使用:

r := strings.NewReader(`<span>></span>`)
z := html.NewTokenizer(r)
for {
tt := z.Next()
if tt == html.ErrorToken {
err := z.Err()
if err == io.EOF {
// Not an error, we're done and it's valid!
return nil
}
return err
}
}

编码/xml

如果你需要更严格的东西,但对 HTML 来说仍然可以,你可以配置一个 xml.Decoder 使用 HTML(这就是我所做的,它让我可以更灵活地决定在任何给定情况下我想要达到的严格程度):

r := strings.NewReader(`<html></html>`)
d := xml.NewDecoder(r)

// Configure the decoder for HTML; leave off strict and autoclose for XHTML
d.Strict = false
d.AutoClose = xml.HTMLAutoClose
d.Entity = xml.HTMLEntity
for {
tt, err := d.Token()
switch err {
case io.EOF:
return nil // We're done, it's valid!
case nil:
default:
return err // Oops, something wasn't right
}
}

关于使用 Golang 进行 HTML 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31788134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com