当前位置: 首页 > news >正文

builder.Services.AddSingleton(HtmlEncoder.Create(UnicodeRanges.All))了解

一句话作用

把 ASP.NET Core 默认的 HTML 转义器换成“不限制 Unicode 范围”的版本,
防止中文、emoji、西里尔字母等字符被强行转义成 &#xXXXX; 实体,
让网页源码更干净、体积更小。

逐段拆解

  1. HtmlEncoder 是什么
    • 位于 System.Text.Encodings.Web 命名空间;
    • 负责把 < > & " 以及“被认为不安全”的字符转成 &lt; &gt; &amp; &#xXXXX;
    • ASP.NET Core 在 Razor TagHelper、HtmlHelper、JsonSerializer 等内部都拿它做转义。
  2. 默认行为
    框架启动时会自动注册一个“保守”的 HtmlEncoder,它只允许
    BasicLatin(就是 ASCII 码 0-127)不加转义,
    所有中文、emoji、带重音的拉丁字母统统转义成 &#x4E2D;&#x6587; 这种实体,
    导致页面源码膨胀,可读性下降。
  3. UnicodeRanges.All 做了什么
    这个静态属性返回一个数组,里面包含所有已定义的 Unicode 区块(CJK、韩文、 emoji、数学符号……)。
    把它喂给 HtmlEncoder.Create(...) 后,编码器会认为
    “除了真正危及 HTML 语法的 < > & " 之外,其余字符一律原样输出”,
    于是中文、日文、emoji 直接出现在 HTML,不再变成 &#x 实体。
  4. 注册到 DI 容器
    AddSingleton<HtmlEncoder>(...) 用我们自己构造的实例
    替换了框架默认注册的那个“只认 ASCII”的实例。
    此后整个应用
    • Razor 视图
    • @Html.Encode / @Html.Raw
    • TagHelper 输出
    • System.Text.Json 写 HTML 片段
      都会使用这个“全开”的编码器。

完整代码片段

csharp
复制
using System.Text.Encodings.Web;
using System.Text.Unicode;var builder = WebApplication.CreateBuilder(args);// 1. 引入包(SDK 已自带,无需额外 NuGet)
// 2. 注册“不转义非 ASCII”的 HTML 编码器
builder.Services.AddSingleton(HtmlEncoder.Create(UnicodeRanges.All));// 3. 其他服务
builder.Services.AddControllersWithViews();var app = builder.Build();
...

效果对比

表格
场景默认编码器注册后
Razor 输出 <p>你好 😄</p> <p>&#x4F60;&#x597D; &#x1F604;</p> <p>你好 😄</p>
页面大小 增加 2~3 倍 原样输出,体积最小
可读性 一堆 &#x 实体 源码即所见

注意事项

  • 只影响 HTML 实体转义,不会关闭 XSS 保护;
    < > & " 依旧会被转义,放心使用。
  • 如果还要让 JavaScript 字符串也不转义非 ASCII,
    可再配一句:
    csharp
    复制
    builder.Services.AddSingleton(JavaScriptEncoder.Create(UnicodeRanges.All));
     
  • URL 编码无影响,URL 仍按 UTF-8 percent-encoding 规则。

一句话总结

这行代码就是告诉 ASP.NET Core:
“别再把中文和 emoji 转成 &#x 实体了,直接原样输出!”
http://www.hskmm.com/?act=detail&tid=27207

相关文章:

  • 从写代码到造系统:一个开发者的自我进化
  • 排查服务器磁盘IO瓶颈脚本 - 实践
  • 2025 年板材源头厂家最新推荐排行榜:聚焦 ENF 级环保、零醛添加等优质板材,精选实力企业助您精准选购零醛添加/装修/生态板/指接板/直拼板板材PET实木板材厂家推荐
  • 数据采集传输卡:430-基于RFSOC的8路5G ADC和8路10G的DAC PCIe卡
  • 微软官方卸载Office工具下载-微软官方的office卸载工具
  • 高清视频显微镜厂家推荐榜:偏光、测量、工业显微镜多场景应用分析
  • 2025大中型企业CRM选型指南:从核心功能到解决方案全解析 - SaaS软件
  • Motion Bro 必备AE/PR特效预设脚本全新汉化版本支持Win/Mac安装教程
  • 世界的物质性及发展规律
  • word快速调整某列宽度
  • word设置表格内容自动调整
  • 深入解析:携手订单日记,溯元粒开启智能升级之路
  • Ubuntu24.04 部分软件开启 Fractional Scaling
  • 2025 年最新酶解海藻源头厂家权威推荐榜单:全方位剖析实力厂商,助力选购优质酶解海藻产品酶解海藻液/酶解海藻肥/纯酶解海藻/高浓度酶解海藻厂家推荐
  • 图表全能王新增支持散点图功能,数据分析更强大!
  • 图表全能王新增支持K线图,数据分析更强大!
  • 图表全能王 (ChartStudio) 新增径向树图 (Radial Tree Diagram):创新层级数据可视化
  • 图表全能王 (ChartStudio) 新增箱线图:轻松展示数据分布
  • VS2022 过期
  • 主页地址
  • LaTeX
  • 强化学习中五大要素
  • 2025 年树脂排水沟厂家权威排行榜单,U形/线性/成品/混凝土/园林/市政/玻璃钢树脂排水沟公司推荐
  • 论文速读 | 25年10月
  • Docker入门实践:从零开始掌握容器技术
  • CF2145F Long Journey
  • 强化学习实验环境库 gym/Gymnasium
  • 设备的分配与回收
  • Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)了解
  • TortoiseGit——Error:Unable to write index