/// <summary> 裁切字符串(中文按照两个字符计算) </summary> /// <param name="str"> 旧字符串 </param> /// <param name="len"> 新字符串长度 </param> /// <param name="HtmlEnable"> 为 false 时过滤 Html 标签后再进行裁切,反之则保留 Html 标签。 </param> /// <remarks> /// <para> 注意: <ol> <li> 若字符串被截断则会在末尾追加“...”,反之则直接返回原始字符串。 </li><li> 参数 <paramref name="HtmlEnable"/> 为 false 时会先调用 <see cref="uoLib.Common.Functions.HtmlFilter"/> 过滤掉 Html 标签再进行裁切。 </li><li> 中文按照两个字符计算。若指定长度位置恰好只获取半个中文字符,则会将其补全,如下面的例子: <br/> /// <code> ///<![CDATA[ ///string str = "感谢使用uoLib。"; ///string A = CutStr(str,4); // A = "感谢..." ///string B = CutStr(str,5); // B = "感谢使..." ///]]> /// </code> /// </li></ol> /// </para> /// </remarks> public static string CutStr(this string str, int len, bool HtmlEnable) { if (str == null || str.Length == 0 || len <= 0) { return(string.Empty); } if (HtmlEnable == false) { str = HTMLHelper.HtmlFilter(str); } int l = str.Length; #region 计算长度 int clen = 0;//当前长度 while (clen < len && clen < l) { //每遇到一个中文,则将目标长度减一。 if ((int)str[clen] > 128) { len--; } clen++; } #endregion 计算长度 if (clen < l) { return(str.Substring(0, clen) + "..."); } else { return(str); } }