• 改造phpcms-v9自带的字符串截取函数


    1.phpcms-v9自带的字符串截取函数在phpcms/libs/functions/global.func.php文件中:
    
    /** 
     * 字符截取 支持UTF8/GBK 
     * @param $string 
     * @param $length 
     * @param $dot 
     */  
    function str_cut($string, $length, $dot = '...') {  
        $strlen = strlen($string);  
        if($strlen <= $length) return $string;  
        $string = str_replace(array(' ',' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), array('∵',' ', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), $string);  
        $strcut = '';  
        if(strtolower(CHARSET) == 'utf-8') {  
            $length = intval($length-strlen($dot)-$length/3);  
            $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);  
            $strcut = str_replace(array('∵', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), $strcut);  
        } else {  
            $dotlen = strlen($dot);  
            $maxi = $length - $dotlen - 1;  
            $current_str = '';  
            $search_arr = array('&',' ', '"', "'", '“', '”', '—', '<', '>', '·', '…','∵');  
            $replace_arr = array('&',' ', '"', ''', '“', '”', '—', '<', '>', '·', '…',' ');  
            $search_flip = array_flip($search_arr);  
            for ($i = 0; $i < $maxi; $i++) {  
                $current_str = ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];  
                if (in_array($current_str, $search_arr)) {  
                    $key = $search_flip[$current_str];  
                    $current_str = str_replace($search_arr[$key], $replace_arr[$key], $current_str);  
                }  
                $strcut .= $current_str;  
            }  
        }  
        return $strcut.$dot;  
    }  
      
    //weiyanhui自己添加,字符串截取函数,建议使用自己写的字符串截取函数,需要在php.ini中开启php_mbstring.dll扩展  
    function str_cut1($string, $length, $dot = '...') {  
        return mb_substr($string,0,$length,'utf-8').$dot;  
    }  
    
    echo str_cut1("abcdefg",3,"...");//结果:abc...
    echo str_cut1("我们都是中国人",3,"...");//结果:我们都...
    不管是字母还是中文,都截取制定的长度
    

      

    转自:http://blog.csdn.net/yanhui_wei/article/details/8159022

  • 相关阅读:
    TortoiseCVS + 错误 + 无效句柄:解决方法
    Oracle学习笔记:关于Oracle服务器在windows32位平台上连接数受限制的问题
    IE6 很邪恶,但我爱它的盒子模型
    PHP环境搭建:Windows 7下安装配置PHP+Apache+Mysql环境教程
    关于跨浏览器测试那点事
    【转】IETester更新至最新版已经兼容Windows7(附下载地址及Debugbar插件)
    Web 设计师的 50 个超便利工具(上)
    各大浏览器 CSS3 和 HTML5 兼容速查表
    15 个 JavaScript Web UI 库
    编写跨浏览器兼容的 CSS 代码的金科玉律
  • 原文地址:https://www.cnblogs.com/xiaomifeng/p/8011916.html
Copyright © 2020-2023  润新知