用户
 找回密码
 入住 CI 中国社区
搜索
查看: 8504|回复: 8
收起左侧

[已解决] 截取中文字符串

[复制链接]
发表于 2008-12-19 13:12:21 | 显示全部楼层 |阅读模式
为什么用文本辅助函数
word_limiter()character_limiter()等都不起作用,只对英文起作用,
请问怎么办啊?
发表于 2008-12-19 16:05:26 | 显示全部楼层
看了楼主说的两个函数(word_limiter(),character_limiter())的代码,自己发现越来越喜欢正则了
需要说明的是 word_limiter() 是单词数量截取 而非单字数量截取,以空格(或多个)分开 计算的。对中文,似乎用处不大
这样说,不知道能不能解楼主的疑惑

如果用文件编码为utf8的话 截取字符
下面函数可实现截取功能
function csubstr($str, $from, $len)
{
return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
'$1',$str);
}

[ 本帖最后由 alertger 于 2008-12-19 16:19 编辑 ]
发表于 2008-12-19 20:01:33 | 显示全部楼层
截取中文字符串,直接用 mb_substr 最好用!
发表于 2008-12-19 20:30:17 | 显示全部楼层
CI的作者不使用中文的
发表于 2008-12-19 21:03:55 | 显示全部楼层
mb_substr函数确实可以避免许多问题,但目前大概有不少的php服务器环境还不能用 这个函数呀(没有包含这个php_mbstring.dll)
我的主机上现在就是这样的情况。咳.....
发表于 2008-12-19 23:04:55 | 显示全部楼层
那就找网上的支持中文截取的 PHP 函数,貌似有很多,google 一下。
发表于 2008-12-20 20:32:27 | 显示全部楼层
PHP复制代码
function str_cut($str, $sublen, $etc = '...')
{
        if(strlen($str)<=$sublen) {
                $rStr = $str;
        } else {
                $I = 0;
                while ($I<$sublen) {
                        $StringTMP = substr($str,$I,1);
 
                        if (ord($StringTMP)>=224) {
                                $StringTMP = substr($str,$I,3);
                                $I = $I + 3;
                        } elseif (ord($StringTMP)>=192) {
                                $StringTMP = substr($str,$I,2);
                                $I = $I + 2;
                        } else {
                                $I = $I + 1;
                        }
                        $StringLast[] = $StringTMP;
                }
 
                $rStr = implode('',$StringLast).$etc;
        }
 
        return $rStr;
}
复制代码


utf8 截字的  中文算2 其他算1
发表于 2009-2-5 14:54:27 | 显示全部楼层
可扩展一下text_helper文件
PHP复制代码
 
if(!function_exists('sub_str')) {
        /**
         * 截取UTF-8编码下字符串的函数
         *
         * @param   string      $str        被截取的字符串
         * @param   int         $length     截取的长度
         * @param   bool        $append     是否附加省略号
         *
         * @return  string
         */

        function sub_str($str, $length = 0, $append = true)
        {
            $str = trim($str);
            $strlength = strlen($str);
       
            if ($length == 0 || $length >= $strlength)
            {
                return $str;
            }
            elseif ($length < 0)
            {
                $length = $strlength + $length;
                if ($length < 0)
                {
                    $length = $strlength;
                }
            }
       
            if (function_exists('mb_substr'))
            {
                $newstr = mb_substr($str, 0, $length, 'utf-8');
            }
            elseif (function_exists('iconv_substr'))
            {
                $newstr = iconv_substr($str, 0, $length, 'utf-8');
            }
            else
            {
                $newstr = substr($str, 0, $length);
            }
       
            if ($append && $str != $newstr)
            {
                $newstr .= '...';
            }
       
            return $newstr;
        }
}
 
复制代码

评分

参与人数 1威望 +3 收起 理由
Hex + 3 我很赞同

查看全部评分

发表于 2012-2-23 15:44:20 | 显示全部楼层
我怎么使用错误啊。。。

本版积分规则