コード例 #1
0
        /// <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);
            }
        }