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

如何对HTML特殊字符编码(非实体化)且不编码HTML标签?

解决方案:编码HTML特殊字符为数字实体并保留标签

要实现只编码文本中的特殊字符(如®、&、©)为数字HTML实体,同时保留HTML标签(如<b>),最可靠的方式是借助HTML解析库区分文本节点和标签节点,避免手动解析的潜在错误。

方法:使用HtmlAgilityPack处理

HtmlAgilityPack是成熟的.NET HTML解析库,能准确识别HTML结构中的文本和标签,仅对文本内容做编码处理。

步骤1:安装NuGet包

Install-Package HtmlAgilityPack

步骤2:实现编码方法

using HtmlAgilityPack;
using System.Text;
using System.Linq;

public static string EncodeSpecialCharsPreserveTags(string input)
{
    var htmlDoc = new HtmlDocument();
    htmlDoc.LoadHtml(input);

    // 遍历所有文本节点
    foreach (var textNode in htmlDoc.DocumentNode.Descendants().OfType<HtmlTextNode>())
    {
        var encodedBuilder = new StringBuilder();
        foreach (char c in textNode.Text)
        {
            // 编码非ASCII字符及HTML特殊符号(&、<、>、"、')为数字实体
            if (c > 127 || c == '&' || c == '<' || c == '>' || c == '"' || c == '\'')
            {
                encodedBuilder.Append($"&#{(int)c};");
            }
            else
            {
                encodedBuilder.Append(c);
            }
        }
        textNode.Text = encodedBuilder.ToString();
    }

    return htmlDoc.DocumentNode.OuterHtml;
}

步骤3:使用示例

var originalText = "Encode this: ®, &, © but not this: <b>";
var encodedResult = EncodeSpecialCharsPreserveTags(originalText);
Console.WriteLine(encodedResult);

输出结果

Encode this: &#174;, &#38;, &#169; but not this: <b>

方法优势

  • 自动区分HTML标签与文本内容,仅编码文本中的特殊字符,完全保留标签结构。
  • 手动生成数字实体,确保输出为&#xxx;格式,而非&reg;这类命名实体,精准匹配需求。

不推荐手动解析的原因

手动用正则匹配标签和文本,极易出现嵌套标签、自闭合标签、属性特殊字符等处理错误,维护成本远高于使用成熟解析库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:50:30