使用Golang进行HTML验证
在我的API中,我有一个POST端点。发布到该端点的预期参数之一是一块(松散的)有效HTML 文章将采用JSON格式 在golang中,我如何确保发布的HTML有效?我已经找了几天了,但还是没找到什么使用Golang进行HTML验证,html,json,go,Html,Json,Go,在我的API中,我有一个POST端点。发布到该端点的预期参数之一是一块(松散的)有效HTML 文章将采用JSON格式 在golang中,我如何确保发布的HTML有效?我已经找了几天了,但还是没找到什么 “有效”这个词有点松散。我试图确保标签被打开和关闭,语音标记位于正确的位置等等。您可以使用from检查HTML blob提供的解析是否正确。仅用于验证,您所要做的就是检查错误。游戏进行得有点晚,但如果您只想验证HTML的结构,这里有几个解析器可以工作(例如,您不关心div是否在范围内,这是不允许的
“有效”这个词有点松散。我试图确保标签被打开和关闭,语音标记位于正确的位置等等。您可以使用from检查HTML blob提供的解析是否正确。仅用于验证,您所要做的就是检查错误。游戏进行得有点晚,但如果您只想验证HTML的结构,这里有几个解析器可以工作(例如,您不关心div是否在范围内,这是不允许的,但是架构级问题): x/net/html 这个包包含一个非常松散的解析器。几乎任何东西都会生成有效的HTML,类似于许多web浏览器试图做的事情(例如,在许多情况下,它会忽略未转换值的问题)。 例如,像
>
这样的东西可能会验证(我没有检查这个特殊的,我只是编出来的)作为一个带有'>'字符的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
}
}
听起来您正在寻找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
}
}