SQL Server特殊字符转换

我们都知道SQL查询过程中,单引号“‘”是特殊字符,所以在查询的时候要转换成双单引号“””。
但这只是特殊字符的一个,在实际项目中,发现对于like操作还有以下特殊字符:下划线“_”,百分号“%”,方括号“[]”以及尖号“^”。
其用途如下:
下划线:用于代替一个任意字符(相当于正则表达式中的 ? )
百分号:用于代替任意数目的任意字符(相当于正则表达式中的 * )
方括号:用于转义(事实上只有左方括号用于转义,右方括号使用最近优先原则匹配最近的左方括号)
尖号:用于排除一些字符进行匹配(这个与正则表达式中的一样)
以下是一些匹配的举例,需要说明的是,只有like操作才有这些特殊字符,=操作是没有的。

a_b…
a[_]b%
a%b…
a[%]b%
a[b…
a[[]b%
a]b…
a]b%
a[]b…
a[[]]b%
a[^]b…
a[[][^]]b%
a[^^]b…
a[[][^][^]]b%

对于like操作,需要进行以下替换(注意顺序也很重要)

[ -> [[] (这个必须是第一个替换的!!)
% -> [%] (这里%是指希望匹配的字符本身包括的%而不是专门用于匹配的通配符)
_ -> [_]
^ -> [^]

 public static string sqlEncode(string strValue, bool isLikeStatement)
    {
        string rtStr = strValue;
        if (isLikeStatement)
        {
            rtStr = strValue.Replace("[", "[[]"); //此句一定要在最前
            rtStr = rtStr.Replace("_", "[_]");
            rtStr = rtStr.Replace("%", "[%]");
            rtStr = rtStr.Replace(@"\", "\\\\");
        }
        rtStr = rtStr.Replace("'", "''");
        return rtStr;
    }

例:

string text = Request.Form["FCKeditor1"].ToString().Trim();
text = sqlEncode(text, true);

输出时替换所有HTML标记:

      public static string NoHTML(string Htmlstring)  //替换HTML标记
      {
          //删除脚本
          Htmlstring = Regex.Replace(Htmlstring, @"<script[^>]*?>.*?</script>", "", RegexOptions.IgnoreCase);
          //删除HTML
          Htmlstring = Regex.Replace(Htmlstring, @"<(.[^>]*)>", "", RegexOptions.IgnoreCase);
          Htmlstring = Regex.Replace(Htmlstring, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
          Htmlstring = Regex.Replace(Htmlstring, @"-->", "", RegexOptions.IgnoreCase);
          Htmlstring = Regex.Replace(Htmlstring, @"<!--.*", "", RegexOptions.IgnoreCase);
          Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);", "\"", RegexOptions.IgnoreCase);
          Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);", "&", RegexOptions.IgnoreCase);
          Htmlstring = Regex.Replace(Htmlstring, @"&(lt|#60);", "<", RegexOptions.IgnoreCase);
          Htmlstring = Regex.Replace(Htmlstring, @"&(gt|#62);", ">", RegexOptions.IgnoreCase);
          Htmlstring = Regex.Replace(Htmlstring, @"&(nbsp|#160);", " ", RegexOptions.IgnoreCase);
          Htmlstring = Regex.Replace(Htmlstring, @"&(iexcl|#161);", "\xa1", RegexOptions.IgnoreCase);
          Htmlstring = Regex.Replace(Htmlstring, @"&(cent|#162);", "\xa2", RegexOptions.IgnoreCase);
          Htmlstring = Regex.Replace(Htmlstring, @"&(pound|#163);", "\xa3", RegexOptions.IgnoreCase);
          Htmlstring = Regex.Replace(Htmlstring, @"&(copy|#169);", "\xa9", RegexOptions.IgnoreCase);
          Htmlstring = Regex.Replace(Htmlstring, @"&#(\d+);", "", RegexOptions.IgnoreCase);
          Htmlstring = Regex.Replace(Htmlstring, @"<img[^>]*>;", "", RegexOptions.IgnoreCase);
          Htmlstring.Replace("<", "");
          Htmlstring.Replace(">", "");
          Htmlstring.Replace("\r\n", "");
          Htmlstring = HttpContext.Current.Server.HtmlEncode(Htmlstring).Trim();
          return Htmlstring;
      }