ZgotmplZ
è un valore speciale che indica che l'input non è valido. Citando dal doc di html/template
:
"ZgotmplZ" is a special value that indicates that unsafe content reached a
CSS or URL context at runtime. The output of the example will be
<img src="#ZgotmplZ">
If the data comes from a trusted source, use content types to exempt it
from filtering: URL(`javascript:...`).
Se si desidera sostituire un testo URL valida, niente di speciale come come è necessaria safeURL
funzione. Se l'esecuzione del modello ha come risultato un valore come "#ZgotmplZ"
, significa che l'URL che desideri inserire non è valido.
Vedi questo esempio:
t := template.Must(template.New("").Parse(`<a href="{{.}}"></a>` + "\n"))
t.Execute(os.Stdout, "http://google.com")
t.Execute(os.Stdout, "badhttp://google.com")
uscita:
<a href="http://google.com"></a>
<a href="#ZgotmplZ"></a>
È possibile utilizzare un valore di tipo template.URL
se si desidera utilizzare un URL come sono, senza fuggire. Nota che in questo caso il valore fornito verrà utilizzato così com'è anche se non è un URL valido.
safeURL
non è una sorta di funzione magica o predeterminata che è possibile utilizzare nei modelli. Ma si può registrare il proprio funzione personalizzata che restituisce un parametro string
URL, un valore di tipo template.URL
:
t2 := template.Must(template.New("").Funcs(template.FuncMap{
"safeURL": func(u string) template.URL { return template.URL(u) },
}).Parse(`<a href="{{. | safeURL}}"></a>` + "\n"))
t2.Execute(os.Stdout, "http://google.com")
t2.Execute(os.Stdout, "badhttp://google.com")
uscita:
<a href="http://google.com"></a>
<a href="badhttp://google.com"></a>
Nota: Se si è in grado di passare in un template.URL
valore direttamente all'esecuzione del modello, non è necessario registrarsi e utilizzare una funzione personalizzata safeURL()
:
t3 := template.Must(template.New("").Parse(`<a href="{{.}}"></a>` + "\n"))
t3.Execute(os.Stdout, template.URL("http://google.com"))
t3.Execute(os.Stdout, template.URL("badhttp://google.com"))
uscita:
<a href="http://google.com"></a>
<a href="badhttp://google.com"></a>
Prova questi sul Go Playground.
Assicurarsi che la stringa dell'URL sia corretta. Ad esempio produrrà 'ZgotmplZ' se il suo 'https:' con uno spazio davanti invece di 'https:' –
Possibile duplicato di [Perché sto vedendo ZgotmplZ nel mio output del modello Go HTML?] (Https: // StackOverflow .com/domande/14765395/why-am-i-seeing-zgotmplz-in-my-go-html-template-output) – Carpetsmoker