如下代碼爲asp.net環境下,c#語言編寫的解決方案.
數據用Dictionary,而不是用其餘的例如ArrayList存放,是爲了速度.
將Dictionary替換爲HashTable也是一個不錯的解決方案
調用舉例
String abc = //....你的某些賦值行爲,這裏的字符串是要處理的內容
.............
abc=Sanitizer.GetSafeHtmlFragment(abc);//被AntiXSS處理
abc=hfjString_SanitizerCompatibleWithChineseCharacters(abc);//使之漢字不出現亂碼c#
private static System.Collections.Generic.Dictionary<string, string> hbjDictionaryFX = new System.Collections.Generic.Dictionary<string, string>();
object hbObject鎖 = new object();
/// <summary>
/// 微軟的AntiXSS v4.0 讓部分漢字亂碼,這裏將亂碼部分漢字轉換回來
/// </summary>
/// <param name="hc輸入值"></param>
/// <returns></returns>
public static String hfjString_SanitizerCompatibleWithChineseCharacters(String hcString_Para)
{
string hbString_ReturnValue = hcString_Para;
hbString_ReturnValue = hbString_ReturnValue.Replace("\r\n", "");//避免出現<br>等標籤後被認爲加上\r\n的換行符,這會出如今多行textbox控件中,不須要的人請註釋這一行代碼
if (hbString_ReturnValue.Contains("&#"))
{
//Dictionary若是沒有內容就初始化內容
if (hbjDictionaryFX.Keys.Count == 0)
{
lock (hbjDictionaryFX)
{
if (hbjDictionaryFX.Keys.Count == 0)
{
hbjDictionaryFX.Clear();//防止多線程狀況下的不安全狀況,雙重檢查理論很完美,可是在多處理器,多線程下,會有平臺漏洞,緣由是亂序寫入這一cpu或系統功能的存在
hbjDictionaryFX.Add("丼", "丼");
hbjDictionaryFX.Add("似", "似");
hbjDictionaryFX.Add("值", "值");
hbjDictionaryFX.Add("儼", "儼");
hbjDictionaryFX.Add("刼", "刼");
hbjDictionaryFX.Add("匼", "匼");
hbjDictionaryFX.Add("吼", "吼");
hbjDictionaryFX.Add("唼", "唼");
hbjDictionaryFX.Add("嘼", "嘼");
hbjDictionaryFX.Add("圼", "圼");
hbjDictionaryFX.Add("堼", "堼");
hbjDictionaryFX.Add("尼", "尼");
hbjDictionaryFX.Add("格", "格");
hbjDictionaryFX.Add("夼", "夼");
hbjDictionaryFX.Add("娼", "娼");
hbjDictionaryFX.Add("嬼", "嬼");
hbjDictionaryFX.Add("崼", "崼");
hbjDictionaryFX.Add("帼", "幗");
hbjDictionaryFX.Add("弼", "弼");
hbjDictionaryFX.Add("怼", "懟");
hbjDictionaryFX.Add("愼", "愼");
hbjDictionaryFX.Add("戼", "戼");
hbjDictionaryFX.Add("挼", "挼");
hbjDictionaryFX.Add("搼", "搼");
hbjDictionaryFX.Add("攼", "攼");
hbjDictionaryFX.Add("昼", "晝");
hbjDictionaryFX.Add("朼", "朼");
hbjDictionaryFX.Add("椼", "椼");
hbjDictionaryFX.Add("樼", "樼");
hbjDictionaryFX.Add("欼", "欼");
hbjDictionaryFX.Add("氼", "氼");
hbjDictionaryFX.Add("洼", "窪");
hbjDictionaryFX.Add("渼", "渼");
hbjDictionaryFX.Add("漼", "漼");
hbjDictionaryFX.Add("瀼", "瀼");
hbjDictionaryFX.Add("焼", "焼");
hbjDictionaryFX.Add("爼", "爼");
hbjDictionaryFX.Add("猼", "猼");
hbjDictionaryFX.Add("琼", "瓊");
hbjDictionaryFX.Add("甼", "甼");
hbjDictionaryFX.Add("瘼", "瘼");
hbjDictionaryFX.Add("眼", "眼");
hbjDictionaryFX.Add("砼", "砼");
hbjDictionaryFX.Add("礼", "禮");
hbjDictionaryFX.Add("稼", "稼");
hbjDictionaryFX.Add("笼", "籠");
hbjDictionaryFX.Add("簼", "簼");
hbjDictionaryFX.Add("紼", "紼");
hbjDictionaryFX.Add("縼", "縼");
hbjDictionaryFX.Add("缼", "缼");
hbjDictionaryFX.Add("耼", "耼");
hbjDictionaryFX.Add("脼", "脼");
hbjDictionaryFX.Add("舼", "舼");
hbjDictionaryFX.Add("茼", "茼");
hbjDictionaryFX.Add("萼", "萼");
hbjDictionaryFX.Add("蔼", "藹");
hbjDictionaryFX.Add("贼", "賊");
hbjDictionaryFX.Add("鬼", "鬼");
}
}
}
//開始替換的遍歷
foreach (string key in hbjDictionaryFX.Keys)
{
if (hbString_ReturnValue.Contains(key))
{
hbString_ReturnValue = hbString_ReturnValue.Replace(key, hbjDictionaryFX[key]);
}
}
}
return hbString_ReturnValue;
}
安全