自定义方法中英文字符截取
生活随笔
收集整理的這篇文章主要介紹了
自定义方法中英文字符截取
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
//方法一:(借鑒于thinkphp中的中英文字符截取)
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) {if(function_exists("mb_substr"))$slice = mb_substr($str, $start, $length, $charset);elseif(function_exists('iconv_substr')) {$slice = iconv_substr($str,$start,$length,$charset);if(false === $slice) {$slice = '';}}else{$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";preg_match_all($re[$charset], $str, $match);$slice = join("",array_slice($match[0], $start, $length));}return $suffix ? $slice.'...' : $slice;
}//方法二:(借鑒于phpcms中的中英文截取)
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;
}
?
轉(zhuǎn)載于:https://www.cnblogs.com/qhorse/p/4772307.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的自定义方法中英文字符截取的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VS2015 添加DNX SDK
- 下一篇: MPMovieplayercontrol