HTML 编码有什么缺点吗?

Does HTML Encoding have any cons?

我在 ASP.NET MVC 框架上开发了一个项目。所有文件和字符集都采用 UTF-8。我正在使用模型绑定,在我的一些模型中,显示 属性 包含一些重音字符或 single/double 引号。

由于 Razor 引擎会自动对助手(即 DisplayNameFor)进行编码,因此会对重音字符和引号进行编码。

我可能会尝试使用一些自定义助手来实现不编码的渲染,但我想了解 HTML 编码是否有任何缺点?我正在使用 UTF-8 编码,我想按原样呈现文本“Öger's tours”。但是它呈现为“Öger's tours”。我问的是这个场景。

(我听说搜索引擎索引在没有编码文本的情况下表现更好。但我不知道为什么。)

谢谢。

实体编码的唯一强制字符是 <,它开始 HTML 元素的开始和结束标记,& 字符,否则开始 HTML 实体,和(在双引号括起的属性内)" 以防止过早终止属性。将实体用于 > 以防止混淆解析器也是一个好主意。

对于其他一切,指定正确的字符集编码并在 HTML 文件中正确应用它绝对足够了。如果 HTML 文件的字符集支持它们,则特别不需要对 ' 外部属性值进行编码,这些属性值包含在单引号或变音符号、连字或其他非 ASCII 字符中。

我找到了使用 Razor encoderType 的 AntiXSS 库的解决方案。这个答案描述得很好。 Special characters in html output

默认的 Razor 编码器对重音字符进行编码,而 AntiXSS 库不对它们进行编码。因此,重音字符按原样呈现。