You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8 Blazor SSR中Meta标签UTF-8字符被实体编码问题解决

解决.NET 8 Blazor SSR中HeadContent内波斯语/阿拉伯语Meta内容被HTML实体编码的问题

以下是几个可行的解决步骤:

1. 确保WebEncoderOptions配置覆盖完整字符范围

在Program.cs中,扩展WebEncoder的字符允许范围,确保包含波斯语/阿拉伯语的所有Unicode字符。如果仅指定阿拉伯语范围可能遗漏波斯语的特殊字符,建议直接允许所有非ASCII字符,或同时指定阿拉伯语和波斯语区块:

builder.Services.Configure<WebEncoderOptions>(options =>
{
    // 允许所有非ASCII字符不被编码
    options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.All);
    
    // 或精确指定所需范围
    // options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.Arabic, UnicodeRanges.Persian);
});

2. 使用MarkupString绕过Blazor默认编码

Blazor SSR会对普通字符串内容自动进行HTML编码,导致非ASCII字符转为实体。在HeadContent中输出Meta内容时,用MarkupString包装文本,直接输出原始字符:

<HeadContent>
    <meta name="description" content="@(new MarkupString("این یک توضیح به زبان فارسی است"))" />
    <meta name="keywords" content="@(new MarkupString("فارسی، بلازور، SSR"))" />
</HeadContent>

注意:使用MarkupString时需确保内容安全,若包含用户输入需先做XSS防护。

3. 验证App.razor的编码与语言配置

确认App.razor中的根HTML标签和meta charset配置正确,确保页面以UTF-8编码渲染:

<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <base href="/" />
    <HeadOutlet />
</head>
<body>
    <Routes />
    <script src="_framework/blazor.web.js"></script>
</body>
</html>

4. 排查中间件干扰

检查项目中是否存在自定义响应中间件(如压缩、编码处理中间件),确保它们未修改输出的字符编码格式,避免UTF-8编码被覆盖。

通常结合前两个步骤即可解决HTML实体编码问题,确保波斯语/阿拉伯语内容在页面源码中以原始字符显示。

内容的提问来源于stack exchange,提问作者Mohammad Komaei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 10:07:15