Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Golang进行HTML验证_Html_Json_Go - Fatal编程技术网

使用Golang进行HTML验证

使用Golang进行HTML验证,html,json,go,Html,Json,Go,在我的API中,我有一个POST端点。发布到该端点的预期参数之一是一块(松散的)有效HTML 文章将采用JSON格式 在golang中,我如何确保发布的HTML有效?我已经找了几天了,但还是没找到什么 “有效”这个词有点松散。我试图确保标签被打开和关闭,语音标记位于正确的位置等等。您可以使用from检查HTML blob提供的解析是否正确。仅用于验证,您所要做的就是检查错误。游戏进行得有点晚,但如果您只想验证HTML的结构,这里有几个解析器可以工作(例如,您不关心div是否在范围内,这是不允许的

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

文章将采用JSON格式

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


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

您可以使用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
    }
}