为什么需要对 html 进行转义?

在 html 中,有一些符号<>等等都是有特定含义的,比如<>是一个标签的开始和结束。如果在一个.html文件写<>,会被解析为标签。那么如果想在页面显示这些特定字符呢?那么就需要对这些字符进行转义,然后写到 html 中,就不会被浏览器认为是 html 中的特殊字符。

go 中的方法

在 go 中,可以使用官方 html 包的 EscapeString 方法,将一个字符串中的在 html 中有特定含义的字符转义,官方对于这个方法的注释如下:

EscapeString escapes special characters like “<” to become “<”. It escapes only five such characters: <, >, &, ‘ and “. UnescapeString(EscapeString(s)) == s always holds, but the converse isn’t always true.

官方示例:

Code:play

1
2
const s = `"Fran & Freddie's Diner" <tasty@example.com>`
fmt.Println(html.EscapeString(s))

Output:

1
&#34;Fran &amp; Freddie&#39;s Diner&#34; &lt;tasty@example.com&gt;

与 EscapeString 对应的方法叫 UnescapeString,官方注释如下:

UnescapeString unescapes entities like “<” to become “<”. It unescapes a larger range of entities than EscapeString escapes. For example, “&aacute;” unescapes to “á”, as does “&#225;” and “&#xE1;”. UnescapeString(EscapeString(s)) == s always holds, but the converse isn’t always true.

官方示例:

Code:play

1
2
const s = `&quot;Fran &amp; Freddie&#39;s Diner&quot; &lt;tasty@example.com&gt;`
fmt.Println(html.UnescapeString(s))

Output:

1
"Fran & Freddie's Diner" <tasty@example.com>

我的测试

如果一个文件 data.html 中的内容如下:

1
<p>请在输入框内贴入你需要转换的HTML代码</p>

那么用chrome打开这个文件显示结果为:

QQ20201115-094330@2x.png

如果想在浏览器显示< 呢?

用 go 的EscapeString方法或者在线html转义工具对<进行转义,得到&lt;,将&lt;加到段落最后,就不会被认为是一个标签的开始了。data.html 改成这样:

1
<p>请在输入框内贴入你需要转换的HTML代码&lt;</p>

chrome 的显示效果为:

QQ20201115-094550@2x.png


为什么需要对 html 进行转义?
https://nrbackback.github.io/2021/03/09/为什么需要对 html 进行转义?/
作者
John Doe
发布于
2021年3月9日
许可协议