mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
Add htmlEscape
and htmlUnescape
template functions
These functions allow trivial escaping and unescaping of HTML entities, and make it far easier to compose other functions for the creation of parameterised URLs.
This commit is contained in:
parent
7dd5cd675a
commit
20555b1630
3 changed files with 53 additions and 0 deletions
|
@ -448,6 +448,27 @@ e.g. `{{ "I :heart: Hugo" | emojify }}`
|
||||||
Takes a string of code and a language, uses Pygments to return the syntax highlighted code in HTML.
|
Takes a string of code and a language, uses Pygments to return the syntax highlighted code in HTML.
|
||||||
Used in the [highlight shortcode](/extras/highlighting/).
|
Used in the [highlight shortcode](/extras/highlighting/).
|
||||||
|
|
||||||
|
### htmlEscape
|
||||||
|
HtmlEscape returns the given string with the critical reserved HTML codes escaped,
|
||||||
|
such that `&` becomes `&` and so on. It escapes only: `<`, `>`, `&`, `'` and `"`.
|
||||||
|
|
||||||
|
Bear in mind that, unless content is passed to `safeHTML`, output strings are escaped
|
||||||
|
usually by the processor anyway.
|
||||||
|
|
||||||
|
e.g.
|
||||||
|
`{{ htmlEscape "Hugo & Caddy > Wordpress & Apache" }} → "Hugo & Caddy > Wordpress & Apache"`
|
||||||
|
|
||||||
|
### htmlUnescape
|
||||||
|
HtmlUnescape returns the given string with html escape codes un-escaped. This
|
||||||
|
un-escapes more codes than `htmlEscape` escapes, including `#` codes and pre-UTF8
|
||||||
|
escapes for accented characters. It defers completely to the Go `html.UnescapeString`
|
||||||
|
function, so functionality is consistent with that codebase.
|
||||||
|
|
||||||
|
Remember to pass the output of this to `safeHTML` if fully unescaped characters
|
||||||
|
are desired, or the output will be escaped again as normal.
|
||||||
|
|
||||||
|
e.g.
|
||||||
|
`{{ htmlUnescape "Hugo & Caddy > Wordpress & Apache" }} → "Hugo & Caddy > Wordpress & Apache"`
|
||||||
|
|
||||||
### humanize
|
### humanize
|
||||||
Humanize returns the humanized version of an argument with the first letter capitalized.
|
Humanize returns the humanized version of an argument with the first letter capitalized.
|
||||||
|
|
|
@ -1775,6 +1775,22 @@ func querify(params ...interface{}) (string, error) {
|
||||||
return qs.Encode(), nil
|
return qs.Encode(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func htmlEscape(in interface{}) (string, error) {
|
||||||
|
conv, err := cast.ToStringE(in)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return html.EscapeString(conv), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func htmlUnescape(in interface{}) (string, error) {
|
||||||
|
conv, err := cast.ToStringE(in)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return html.UnescapeString(conv), nil
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
funcMap = template.FuncMap{
|
funcMap = template.FuncMap{
|
||||||
"absURL": func(a string) template.HTML { return template.HTML(helpers.AbsURL(a)) },
|
"absURL": func(a string) template.HTML { return template.HTML(helpers.AbsURL(a)) },
|
||||||
|
@ -1803,6 +1819,8 @@ func init() {
|
||||||
"gt": gt,
|
"gt": gt,
|
||||||
"hasPrefix": func(a, b string) bool { return strings.HasPrefix(a, b) },
|
"hasPrefix": func(a, b string) bool { return strings.HasPrefix(a, b) },
|
||||||
"highlight": highlight,
|
"highlight": highlight,
|
||||||
|
"htmlEscape": htmlEscape,
|
||||||
|
"htmlUnescape": htmlUnescape,
|
||||||
"humanize": humanize,
|
"humanize": humanize,
|
||||||
"in": in,
|
"in": in,
|
||||||
"index": index,
|
"index": index,
|
||||||
|
|
|
@ -93,6 +93,13 @@ eq: {{ if eq .Section "blog" }}current{{ end }}
|
||||||
findRE: {{ findRE "[G|g]o" "Hugo is a static side generator written in Go." 1 }}
|
findRE: {{ findRE "[G|g]o" "Hugo is a static side generator written in Go." 1 }}
|
||||||
hasPrefix 1: {{ hasPrefix "Hugo" "Hu" }}
|
hasPrefix 1: {{ hasPrefix "Hugo" "Hu" }}
|
||||||
hasPrefix 2: {{ hasPrefix "Hugo" "Fu" }}
|
hasPrefix 2: {{ hasPrefix "Hugo" "Fu" }}
|
||||||
|
htmlEscape 1: {{ htmlEscape "Cathal Garvey & The Sunshine Band <cathal@foo.bar>" | safeHTML}}
|
||||||
|
htmlEscape 2: {{ htmlEscape "Cathal Garvey & The Sunshine Band <cathal@foo.bar>"}}
|
||||||
|
htmlUnescape 1: {{htmlUnescape "Cathal Garvey & The Sunshine Band <cathal@foo.bar>" | safeHTML}}
|
||||||
|
htmlUnescape 2: {{"Cathal Garvey &amp; The Sunshine Band &lt;cathal@foo.bar&gt;" | htmlUnescape | htmlUnescape | safeHTML}}
|
||||||
|
htmlUnescape 3: {{"Cathal Garvey &amp; The Sunshine Band &lt;cathal@foo.bar&gt;" | htmlUnescape | htmlUnescape }}
|
||||||
|
htmlUnescape 4: {{ htmlEscape "Cathal Garvey & The Sunshine Band <cathal@foo.bar>" | htmlUnescape | safeHTML }}
|
||||||
|
htmlUnescape 5: {{ htmlUnescape "Cathal Garvey & The Sunshine Band <cathal@foo.bar>" | htmlEscape | safeHTML }}
|
||||||
humanize 1: {{ humanize "my-first-post" }}
|
humanize 1: {{ humanize "my-first-post" }}
|
||||||
humanize 2: {{ humanize "myCamelPost" }}
|
humanize 2: {{ humanize "myCamelPost" }}
|
||||||
humanize 3: {{ humanize "52" }}
|
humanize 3: {{ humanize "52" }}
|
||||||
|
@ -149,6 +156,13 @@ eq: current
|
||||||
findRE: [go]
|
findRE: [go]
|
||||||
hasPrefix 1: true
|
hasPrefix 1: true
|
||||||
hasPrefix 2: false
|
hasPrefix 2: false
|
||||||
|
htmlEscape 1: Cathal Garvey & The Sunshine Band <cathal@foo.bar>
|
||||||
|
htmlEscape 2: Cathal Garvey &amp; The Sunshine Band &lt;cathal@foo.bar&gt;
|
||||||
|
htmlUnescape 1: Cathal Garvey & The Sunshine Band <cathal@foo.bar>
|
||||||
|
htmlUnescape 2: Cathal Garvey & The Sunshine Band <cathal@foo.bar>
|
||||||
|
htmlUnescape 3: Cathal Garvey & The Sunshine Band <cathal@foo.bar>
|
||||||
|
htmlUnescape 4: Cathal Garvey & The Sunshine Band <cathal@foo.bar>
|
||||||
|
htmlUnescape 5: Cathal Garvey & The Sunshine Band <cathal@foo.bar>
|
||||||
humanize 1: My first post
|
humanize 1: My first post
|
||||||
humanize 2: My camel post
|
humanize 2: My camel post
|
||||||
humanize 3: 52nd
|
humanize 3: 52nd
|
||||||
|
|
Loading…
Reference in a new issue