簡體   English   中英

使用Golang進行HTML驗證

[英]HTML Validation with Golang

在我的API中,我有一個POST終點。 發布到該終點的預期參數之一是(松散)有效HTML塊。

POST將采用JSON格式。

在golang中,我如何確保發布的HTML有效? 我一直在尋找一些東西現在仍然沒有找到任何東西?

“有效”一詞有點松散。 我試圖確保標簽打開和關閉,語音標記在正確的位置等。

您使用此程序包中的 html.Parse檢查HTML blob是否正確解析。 僅用於驗證,您所要做的就是檢查錯誤。

游戲有點晚了,但是如果你只是想驗證HTML的結構,那么Go中的幾個解析器會起作用(例如,你不關心div是否在一個跨度內,這是不允許的)但是模式級問題):

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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM