.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;
}

调用:

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;
}

三、穿过代理服务器取远程用户真实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();
}

四、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;
        }
}

调用:

 //=》特殊处理 只读取20位长度的User数据
                if (System.Text.Encoding.Default.GetBytes(user).Length > 20)//Saitor
                {
                    user = user.CutByteString(20);
                }
时间: 2024-11-06 14:02:58

.NET常用操作小知识的相关文章

html、css中常用的小知识记录

好多东西过一段时间不用就忘记了,为此写了这篇文章,用来记录每次想不起来的小知识! 1.鼠标停留显示提示,使用title .如:title

mybatis常用操作数据库知识

 mybatis生成uuid         <insert id="insert" parameterType="自定义的属性类名"> <selectKey keyProperty="userId//你的主键属性名" resultType="String" order="BEFORE"> select replace(uuid(),'-','') from dual //原样照抄

常用JS小知识汇总

1 上传图片:html代码 <input id="image" type='file' name='myFile' size='15' onchange="showPicture(this)" /> <img id="111" src="img/1.jpg" width="133" height="200" /> js代码: <script type=&qu

IT运维中常用的DNS知识(小总结)

最近的公司的DNS解析经常出现解析异常现象,搞的半死不活. 常用小知识总结一下:一.转发器与条件转发器后者优先级高于前者,DNS优先查找当前名称空间,若查找不到,则查找条件转发器中的名称空间,查找无果,继续查找转发器中配置主机: 二. DNS缓存清理DNS缓存之一:客户端解析器缓存 ---->ipconfig /flushdns;DNS缓存之二:DNS server端缓存 ----->dnscmd /clearcache,常用于清理通过条件转发的外部名称空间的缓存. 缓存查询: ipconfi

MySQL不常用、易忽略的小知识

笔者从事开发也有一段时间了,关于数据库方面的一些小知识在这里总结一下 1.count(*),count(1)与count(column)区别 count(*)对行的数目进行计算,包含NULL count(1)对行的数目进行计算,包含NULL count(column)对特定的列的值具有的行数进行计算,不包含NULL值. 所以count(1)这个用法和count(*)的结果是一样的. 注意: 如果表没有主键,那么count(1)比count(*)快. 如果有主键,那么count(主键,联合主键)比

常用 JavaScript 小技巧及原理详解

善于利用JS中的小知识的利用,可以很简洁的编写代码 1. 使用!!模拟Boolean()函数 原理:逻辑非操作一个数据对象时,会先将数据对象转换为布尔值,然后取反,两个!!重复取反,就实现了转换为布尔值的效果. 2. 使用一元加(+)模拟Number()函数 原理:对非数值类型的数据使用一元加(+),会起到与Number()函数相同的效果. null转换为0 undefined转换为NaN false转换为0,true转换为1 对于字符串: 空字串转换为0 含有数字或者浮点数或者十六进制格式的数

ios开发小知识2

http://blog.sina.com.cn/s/blog_66450b500102vadq.html http://www.cnblogs.com/lovesmile/archive/2012/06/27/2565569.html ios开发小知识2(转自cc) 退回输入键盘  - (BOOL)textFieldShouldReturn:(id)textField{    [textField resignFirstResponder];} CGRectCGRect frame = CGRe

linux入门小知识,你在里面总会有发现

一 . grep及egrep的基本介绍: 首先我们要知道grep的这个命令的本身意思即: grep [Global search REgular expression and Print out the line ]  全局搜索正则表达式匹配到的内容,并且打印出匹配内容所在行 grep 是一个很常用但是也很强大的搜索工具,它是以正则表达式为基础,搜索文本文件中符合要求的字符串,并且显示所匹配的字符串所在行. grep搜索的内容是以一行来显示的,当然我们可以使用一些特别的选项来只显示我们所匹配到的

电脑系统维护小知识!——————【Badboy】

电脑系统维护小知识 1.经常进行"磁盘清理"和磁盘碎片整理" 当硬盘用久了,无数次的新增.更改和删除程序和文件后,就会造成很多断断续续的扇区,非连续性的文件便会愈来愈多,硬盘磁头便需要花更多时间跳来跳去来读取数据,这就导致硬盘速度减慢.因此,我们应该定期进行"磁盘清理"和磁盘碎片整理",将所有非连续性的文件重新编排整齐.处理方法:点开始-程序-附件-系统工具-磁盘清理程序和磁盘碎片整理程序.有可能整理过程很慢,那是你长时间没有清理或者有只读文件,