[英]encode html in Asp.net C# but leave tags intact
我需要編碼整個文本,同時保持<和>完整。
例
<p>Give me 100.000 €!</p>
必須成為:
<p>Give me 100.000 €!</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.