ZgotmplZ
là giá trị đặc biệt cho biết thông tin nhập của bạn không hợp lệ. Trích dẫn từ doc của 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:...`).
Nếu bạn muốn thay thế một url văn bản hợp lệ, không có gì đặc biệt như như safeURL
chức năng là cần thiết. Nếu việc thực thi mẫu của bạn dẫn đến giá trị như "#ZgotmplZ"
, điều đó có nghĩa là URL bạn muốn chèn không hợp lệ.
Xem ví dụ này:
t := template.Must(template.New("").Parse(`<a href="{{.}}"></a>` + "\n"))
t.Execute(os.Stdout, "http://google.com")
t.Execute(os.Stdout, "badhttp://google.com")
Output:
<a href="http://google.com"></a>
<a href="#ZgotmplZ"></a>
Bạn có thể sử dụng một giá trị kiểu template.URL
nếu bạn muốn sử dụng một URL như nó vốn có mà không thoát. Lưu ý rằng trong trường hợp này giá trị được cung cấp sẽ được sử dụng như-ngay cả khi nó không phải là một URL hợp lệ.
safeURL
không phải là một loại ma thuật hoặc chức năng được khai báo trước mà bạn có thể sử dụng trong các mẫu. Nhưng bạn có thể đăng ký chức năng tùy chỉnh của riêng bạn mà trả về một tham số string
url là một giá trị kiểu 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")
Output:
<a href="http://google.com"></a>
<a href="badhttp://google.com"></a>
Lưu ý: Nếu bạn có thể vượt qua trong một template.URL
giá trị trực tiếp cho việc thực thi mẫu, bạn không cần đăng ký và sử dụng chức năng tùy chỉnh 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"))
Output:
<a href="http://google.com"></a>
<a href="badhttp://google.com"></a>
Hãy thử những trên Go Playground.
Đảm bảo chuỗi url là chính xác. Ví dụ, nó sẽ xuất ra 'ZgotmplZ' nếu có 'https:' với dấu cách phía trước thay vì 'https:' –
Có thể trùng lặp của [Tại sao tôi thấy ZgotmplZ trong đầu ra mẫu HTML Go của tôi?] (Https: // stackoverflow .com/questions/14765395/why-am-i-see-zgotmplz-in-my-go-html-mẫu-đầu ra) – Carpetsmoker