我需要编码整个文本,同时保留<和>完好。
例如
<p>Give me 100.000 €!</p>
必须成为:
<p>Give me 100.000 €!</p>
html标签必须保持完整
答案 0 :(得分:2)
您可以选择Html Agility Pack,然后对代码的值进行编码
答案 1 :(得分:2)
使用匹配标记或标记之间的正则表达式,并对以下内容进行编码:
html = Regex.Replace(
html,
"(<[^>]+>|[^<]+)",
m => m.Value.StartsWith("<") ? m.Value : HttpUtility.HtmlEncode(m.Value)
);
答案 2 :(得分:1)
也许只使用string.replace来表示你想编码的那些字符?
答案 3 :(得分:0)
除了htmlencode之外,您还可以使用HtmlTextWriter。因此,您可以使用HtmlTextWriter设置<p></p>
,然后使用HtmlEncode设置<p></p>
的正文。 HtmlTextWriter允许ToString();和一堆其他方法,所以它不应该是更多的代码。
答案 4 :(得分:0)
正如其他人所说,这可以通过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编码的文本替换任何文本节点。