首页 > 代码库 > .NET常用操作小知识

.NET常用操作小知识

一、.NET截取指定长度汉字超出部分以“.....”表示

/// <summary> /// 将指定字符串按指定长度进行剪切, /// </summary> /// <param name= "oldStr "> 需要截断的字符串 </param> /// <param name= "maxLength "> 字符串的最大长度 </param> /// <param name= "endWith "> 超过长度的后缀 </param> /// <returns> 如果超过长度,返回截断后的新字符串加上后缀,否则,返回原字符串 </returns> public static string StringTruncat(string oldStr, int maxLength, string endWith) { if (string.IsNullOrEmpty(oldStr)) // throw new NullReferenceException( "原字符串不能为空 "); return oldStr + endWith; if (maxLength < 1) throw new Exception("返回的字符串长度必须大于[0] "); if (oldStr.Length > maxLength) { string strTmp = oldStr.Substring(0, maxLength); if (string.IsNullOrEmpty(endWith)) return strTmp; else return strTmp + endWith; } return oldStr; }
View Code

调用:

 var v = StringTruncat("广东省深圳市西乡镇宝安区", 10, "...");

显示:广东省深圳市西乡镇宝...

 

二、过滤SQL非法字符串

/// <summary> /// 过滤SQL非法字符串 /// </summary> /// <param name="value"></param> /// <returns></returns> public static string Filter(string value) { if (string.IsNullOrEmpty(value)) return string.Empty; value = Regex.Replace(value, @";", string.Empty); value = Regex.Replace(value, @"", string.Empty); value = Regex.Replace(value, @"&", string.Empty); value = Regex.Replace(value, @"%20", string.Empty); value = Regex.Replace(value, @"--", string.Empty); value = Regex.Replace(value, @"==", string.Empty); value = Regex.Replace(value, @"<", string.Empty); value = Regex.Replace(value, @">", string.Empty); value = Regex.Replace(value, @"%", string.Empty); return value; }
View Code

三、穿过代理服务器取远程用户真实IP地址:

if(Request.ServerVariables["HTTP_VIA"]!=null){  string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();}else{  string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();}
View Code

四、sql server中 len和datalength区别

select len(‘a好‘)  //返回为2
select datalength(‘a好‘)  //返回为3

五、截取指定字节长度的字符串扩展方法

public static class Extension{      /// <summary>        /// 截取指定字节长度的字符串        /// </summary>        /// <param name="str">原字符串</param>        /// <param name="len">截取字节长度</param>        /// <returns></returns>        public static string CutByteString(this string str, int len)        {            string result = string.Empty;// 最终返回的结果            if (string.IsNullOrEmpty(str)) { return result; }            int byteLen = System.Text.Encoding.Default.GetByteCount(str);// 单字节字符长度            int charLen = str.Length;// 把字符平等对待时的字符串长度            int byteCount = 0;// 记录读取进度            int pos = 0;// 记录截取位置            if (byteLen > len)            {                for (int i = 0; i < charLen; i++)                {                    if (Convert.ToInt32(str.ToCharArray()[i]) > 255)// 按中文字符计算加2                    { byteCount += 2; }                    else// 按英文字符计算加1                    { byteCount += 1; }                    if (byteCount > len)// 超出时只记下上一个有效位置                    {                        pos = i;                        break;                    }                    else if (byteCount == len)// 记下当前位置                    {                        pos = i + 1;                        break;                    }                }                if (pos >= 0)                { result = str.Substring(0, pos); }            }            else            { result = str; }            return result;        }        /// <summary>        /// 截取指定字节长度的字符串        /// </summary>        /// <param name="str">原字符串</param>        /// <param name="startIndex">起始位置</param>        /// <param name="len">截取字节长度</param>        /// <returns></returns>        public static string CutByteString(this string str, int startIndex, int len)        {            string result = string.Empty;// 最终返回的结果            if (string.IsNullOrEmpty(str)) { return result; }            int byteLen = System.Text.Encoding.Default.GetByteCount(str);// 单字节字符长度            int charLen = str.Length;// 把字符平等对待时的字符串长度            if (startIndex == 0)            { return CutByteString(str, len); }            else if (startIndex >= byteLen)            { return result; }            else //startIndex < byteLen            {                int AllLen = startIndex + len;                int byteCountStart = 0;// 记录读取进度                int byteCountEnd = 0;// 记录读取进度                int startpos = 0;// 记录截取位置                                int endpos = 0;// 记录截取位置                for (int i = 0; i < charLen; i++)                {                    if (Convert.ToInt32(str.ToCharArray()[i]) > 255)// 按中文字符计算加2                    { byteCountStart += 2; }                    else// 按英文字符计算加1                    { byteCountStart += 1; }                    if (byteCountStart > startIndex)// 超出时只记下上一个有效位置                    {                        startpos = i;                        AllLen = startIndex + len - 1;                        break;                    }                    else if (byteCountStart == startIndex)// 记下当前位置                    {                        startpos = i + 1;                        break;                    }                }                if (startIndex + len <= byteLen)//截取字符在总长以内                {                    for (int i = 0; i < charLen; i++)                    {                        if (Convert.ToInt32(str.ToCharArray()[i]) > 255)// 按中文字符计算加2                        { byteCountEnd += 2; }                        else// 按英文字符计算加1                        { byteCountEnd += 1; }                        if (byteCountEnd > AllLen)// 超出时只记下上一个有效位置                        {                            endpos = i;                            break;                        }                        else if (byteCountEnd == AllLen)// 记下当前位置                        {                            endpos = i + 1;                            break;                        }                    }                    endpos = endpos - startpos;                }                else if (startIndex + len > byteLen)//截取字符超出总长                {                    endpos = charLen - startpos;                }                if (endpos >= 0)                { result = str.Substring(startpos, endpos); }            }            return result;        }}
View Code

调用:

 //=》特殊处理 只读取20位长度的User数据                if (System.Text.Encoding.Default.GetBytes(user).Length > 20)//Saitor                {                    user = user.CutByteString(20);                }

 

.NET常用操作小知识