簡體   English   中英

在Asp.net C#中編碼html,但保留標簽完好無損

[英]encode html in Asp.net C# but leave tags intact

我需要編碼整個文本,同時保持<和>完整。

<p>Give me 100.000 €!</p>

必須成為:

<p>Give me 100.000 &euro;!</p>

html標簽必須保持不變

使用匹配標記或標記之間的正則表達式,並對以下內容進行編碼:

html = Regex.Replace(
  html,
  "(<[^>]+>|[^<]+)",
  m => m.Value.StartsWith("<") ? m.Value : HttpUtility.HtmlEncode(m.Value)
);

你可能會去Html Agility Pack ,然后編碼標簽的值

也許使用string.replace只是你想要編碼的那些字符?

除了htmlencode之外,您還可以使用HtmlTextWriter。 所以,你會使用的HtmlTextWriter設置您的<p></p>然后只是設置的身體<p></p>使用的HTMLEncode。 HtmlTextWriter允許ToString(); 和一堆其他方法所以它不應該是更多的代碼。

正如其他人所建議的那樣,這可以通過HtmlAgilityPack來實現。

 public static class HtmlTextEncoder
 {
    public static string HtmlEncode(string html)
    {
        if (html == null) return null;

        var doc = new HtmlDocument();
        doc.LoadHtml(html);

        EncodeNode(doc.DocumentNode);

        doc.OptionWriteEmptyNodes = true;
        using (var s = new MemoryStream())
        {
            doc.Save(s);
            var encoded = doc.Encoding.GetString(s.ToArray());
            return encoded;
        }
    }

    private static void EncodeNode(HtmlNode node)
    {
        if (node.HasChildNodes)
        {
            foreach (var childNode in node.ChildNodes)
            {
                if (childNode.NodeType == HtmlNodeType.Text)
                {
                    childNode.InnerHtml = HttpUtility.HtmlEncode(childNode.InnerHtml);
                }
                else
                {
                    EncodeNode(childNode);
                }
            }
        }
        else if (node.NodeType == HtmlNodeType.Text)
        {
            node.InnerHtml = HttpUtility.HtmlEncode(node.InnerHtml);
        }
    }
}

這將遍歷HTML中的所有節點,並用HTML編碼的文本替換任何文本節點。

我已經創建了一個.NET小提琴來演示這種技術

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM