.net 3.5(sp1)中的System.Web.HttpUtility.HtmlEncode/.Decode函數有沒有「瘦」的選擇?一個單獨的庫很好..甚至是'想要的',至少是不會引入System.Web需要的依賴關係的'全新世界'的東西。替代System.Web.HttpUtility.HtmlEncode/Decode?
我只想要一個正常的字符串轉換成它的XML/XHTML兼容當量(&回)。
.net 3.5(sp1)中的System.Web.HttpUtility.HtmlEncode/.Decode函數有沒有「瘦」的選擇?一個單獨的庫很好..甚至是'想要的',至少是不會引入System.Web需要的依賴關係的'全新世界'的東西。替代System.Web.HttpUtility.HtmlEncode/Decode?
我只想要一個正常的字符串轉換成它的XML/XHTML兼容當量(&回)。
對於XML,你只需要編碼有特殊含義的字符,所以你可以用喜歡簡單的東西脫身:
public static string XmlEncode(string value) {
return value
.Replace("<", "<")
.Replace(">", ">")
.Replace("\"", """)
.Replace("'", "'")
.Replace("&", "&");
}
public static string XmlDecode(string value) {
return value
.Replace("<", "<")
.Replace(">", ">")
.Replace(""", "\"")
.Replace("'", "'")
.Replace("&", "&");
}
如果可能的話,你可以從單碼「借用」 HttpUtility類直接編譯你的工具程序集。
雖然編碼可能看起來很簡單,我強烈建議使用一個庫,是在廣泛使用,以儘量減少安全漏洞的風險。微軟的Anti-Cross Site Scripting Library提供了Html/Xml/Javascript轉義的方法和相應的屬性轉義,並且應該覆蓋大部分Web需求。
在.NET Framework 4.0中,System.Net.WebUtility.HtmlEncode吧? 請注意,這個類位於System.dll中,而不是System.Web.dll。
好的。值得注意的是它只能在.net 4.0或更高版本中使用。 – dmihailescu 2015-01-09 15:14:24
對於HTML,如果使用.NET Framework 4.0的System.Net.WebUtility不是一個可行的解決方案,你可以這樣做:
string HtmlEncode(string s)
{
if (s == null)
{
return null;
}
var result = new StringBuilder(s.Length);
foreach (char ch in s)
{
if (ch <= '>')
{
switch (ch)
{
case '<':
result.Append("<");
break;
case '>':
result.Append(">");
break;
case '"':
result.Append(""");
break;
case '\'':
result.Append("'");
break;
case '&':
result.Append("&");
break;
default:
result.Append(ch);
break;
}
}
else if (ch >= 160 && ch < 256)
{
result.Append("&#").Append(((int)ch).ToString(CultureInfo.InvariantCulture)).Append(';');
}
else
{
result.Append(ch);
}
}
return result.ToString();
}
實施立信:
做了很多替換的()在一個字符串上會非常不方便,特別是在大字符串上。
免責聲明:
該解決方案是由在.NET Framework 4.0系統組件使用JetBrains dotPeek啓發。
+1不知道System.Net.WebUtility! – BrunoSalvino 2014-01-20 18:05:33
我的問題實際上並不完全清楚,但那是我的用例。謝謝! – 2010-05-06 12:30:01
這'XmlDecode'甚至沒有開始支付XML的字符和實體引用(http://www.w3.org/TR/xml/#sec-references),請不要介意'CDATA'節等 – 2010-10-28 12:03:06