bless 发表于 2008-12-19 13:12:21

截取中文字符串

为什么用文本辅助函数
word_limiter()character_limiter()等都不起作用,只对英文起作用,
请问怎么办啊?

alertger 发表于 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 编辑 ]

Hex 发表于 2008-12-19 20:01:33

截取中文字符串,直接用 mb_substr 最好用!

moonster 发表于 2008-12-19 20:30:17

CI的作者不使用中文的:lol

alertger 发表于 2008-12-19 21:03:55

mb_substr函数确实可以避免许多问题,但目前大概有不少的php服务器环境还不能用 这个函数呀(没有包含这个php_mbstring.dll)
我的主机上现在就是这样的情况。咳.....

Hex 发表于 2008-12-19 23:04:55

那就找网上的支持中文截取的 PHP 函数,貌似有很多,google 一下。

yz20sui 发表于 2008-12-20 20:32:27

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

trynews 发表于 2009-2-5 14:54:27

可扩展一下text_helper文件

if(!function_exists('sub_str')) {
        /**
       * 截取UTF-8编码下字符串的函数
       *
       * @param   string      $str      被截取的字符串
       * @param   int         $length   截取的长度
       * @param   bool      $append   是否附加省略号
       *
       * @returnstring
       */
        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;
        }
}

mckee1990 发表于 2012-2-23 15:44:20

我怎么使用错误啊。。。
页: [1]
查看完整版本: 截取中文字符串