显示中英文混排截取字符串的两种方法

方法一:用c#程序处理。

附代码

View Code
        /// <summary>
        /// 返回某字符串的混编长度
        /// </summary>
        /// <param name="sourceStr">源字符串</param>
        /// <returns></returns>
        public static int MixLength(this string sourceStr)
        {
            int mixLength = sourceStr.Length;
            for (int i = 0; i < sourceStr.Length; i++)
            {
                byte[] bytes = Encoding.Default.GetBytes(sourceStr.Substring(i, 1));
                if (bytes.Length > 1)
                {
                    mixLength++;
                }
            }
            return mixLength;
        }

        /// <summary>
        /// 截取相当于mixLength英文字符长度的中英文混合字符串
        /// </summary>
        /// <param name="sourceStr">源字符串</param>
        /// <param name="mixLength">要截取的长度,中文算两个长度单位</param>
        /// <returns></returns>
        public static string MixSubstring(this string sourceStr, int mixLength)
        {
            int length = mixLength;
            bool flag = false;//标记length是否减1
            int i = 0;
            while (i < length)
            {
                if (flag)
                {
                    length--;
                    flag = false;//重置
                }

                byte[] bytes = Encoding.Default.GetBytes(sourceStr.Substring(i, 1));
                if (bytes.Length > 1)//是中文,则在下次减一
                {
                    flag = true;
                }
                i++;
            }
            return sourceStr.Substring(0, length);
        } 

缺点:在真正显示的界面上中文字符的长度并非英文字符的两倍。

方法二:用css控制样式。

如果是控制表格中td的内容显示省略,则首先给表格加样式 table-layout:fixed;

然后给相应的td加上样式:

 

    .ellipsis
    {
        width:200px; //需要控制显示的长度
        white-space: nowrap;
        word-break: keep-all;
        overflow: hidden;
        text-overflow: ellipsis;
    }

 

如果是span或者div,则直接应用该样式即可。

缺点:不同浏览器之间有少许差别,但相比起第一种方法很精确。

posted @ 2013-01-04 18:20  瓜王  阅读(303)  评论(0编辑  收藏  举报