zoukankan      html  css  js  c++  java
  • PHP截取中文无乱码函数——cutstr

    转载:http://blog.sina.com.cn/s/blog_694c144f010179wj.html

    真正好用的PHP截取中文无乱码函数——cutstr

     (2012-07-09 11:17:34)
     
    最近给公司做项目,多多少少也积累了一些经验,发现了一个真正好用的PHP截取中文无乱码的函数,这就是discuz的include目录中的global.func.php文件中自带的function cutstr函数。
    cutstr函数的完整代码如下:
    function cutstr($string, $length, $dot = ' ...') {
        global $charset;

        if(strlen($string) <= $length) {
            return $string;
        }

        $string = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;'), array('&', '"', '<', '>'), $string);

        $strcut = '';
        if(strtolower($charset) == 'utf-8') {

            $n = $tn = $noc = 0;
            while($n < strlen($string)) {

                $t = ord($string[$n]);
                if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
                    $tn = 1; $n++; $noc++;
                } elseif(194 <= $t && $t <= 223) {
                    $tn = 2; $n += 2; $noc += 2;
                } elseif(224 <= $t && $t <= 239) {
                    $tn = 3; $n += 3; $noc += 2;
                } elseif(240 <= $t && $t <= 247) {
                    $tn = 4; $n += 4; $noc += 2;
                } elseif(248 <= $t && $t <= 251) {
                    $tn = 5; $n += 5; $noc += 2;
                } elseif($t == 252 || $t == 253) {
                    $tn = 6; $n += 6; $noc += 2;
                } else {
                    $n++;
                }

                if($noc >= $length) {
                    break;
                }

            }
            if($noc > $length) {
                $n -= $tn;
            }

            $strcut = substr($string, 0, $n);

        } else {
            for($i = 0; $i < $length; $i++) {
                $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
            }
        }

        $strcut = str_replace(array('&', '"', '<', '>'), array('&amp;', '&quot;', '&lt;', '&gt;'), $strcut);

        return $strcut.$dot;
    }

    以前以为Smarty的插件modifier.smartTruncate.php文件中的smartTruncate函数在截取中文的时候很好用,后来发现用这个函数在截取多种不同乱码字符的时候还是会出问题,比如我们经常要在<ul>或<dl>这样的标签里输出一排文章标题列表,用smartTruncate在Smarty的模板页中输出就会出现中英文参差不齐的现象,但是用了Discuz的include目录中global.func.php文件自带的cutstr函数先在Controller中截取,然后再assign到Smarty里就可以避免这种问题。
    一句话,cutstr这个函数在截中文的时候真的很好用!
  • 相关阅读:
    nio/mina(三) mina传对象
    Android系统中长按事件的实现机制解析
    android游戏寻路算法
    Xcode 常用快捷键及代码自动排版
    java 日期加天数得到新的日期
    cygwin 中文乱码问题
    Android 中自定义手势
    mina服务端与c++客户端通信1
    java NIO 和阻塞I/O的区别
    Android读写文件
  • 原文地址:https://www.cnblogs.com/wanlibingfeng/p/5702759.html
Copyright © 2011-2022 走看看