2015-01-05 97 views
3

如何防止逃逸''在HTML模板:在golang HTML模板逃逸「到'

package main 

import (
    "html/template" 
    "os" 
) 

const tmpl = `<html> 
    <head> 
     <title>{{.Title}}</title> 
    </head> 
</html>` 

func main() { 
    t := template.Must(template.New("ex").Parse(tmpl)) 
    v := map[string]interface{}{ 
     "Title": template.HTML("Hello World'"), 
    } 
    t.Execute(os.Stdout, v) 
} 

它輸出:

<html> 
    <head> 
     <title>Hello World&#39;</title> 
    </head> 
</html> 

所需的輸出:

<html> 
    <head> 
     <title>Hello World'</title> 
    </head> 
</html> 

playouground

+0

請爲我提供您正在使用的js庫。 – Innovation

+2

'是好的,只是離開它。 – Volker

+1

@Innovation no js,只是golang –

回答

1

@dyoo已經明確解釋了<title>內容被視爲RCDATA。轉義的代碼是here。分支if t == contentTypeHTML就是template.HTML發生的情況。

如果您確實需要控制源的輸出,請使用text/template並手動進行轉義。