Jquery中文网 www.jquerycn.cn
Jquery中文网 >  脚本编程  >  php  >  正文 php 中英文混合字符串的截取函数

php 中英文混合字符串的截取函数

发布时间:2017-08-16   编辑:www.jquerycn.cn
分享一个php实现的截取中英文混合字符串的代码,中文默认点两个英文的宽度,本例实现了中英文混合字符串的截取方法,有需要的朋友参考下。

默认中文占两个英的宽度..(为解决截取中英文宽度很的问题,采用了字符排序)

完整代码:
 

复制代码 代码示例:

<?php 
/**
* 截取中英文混合的字符串
* by www.jbxue.com
*/
function mb_str_split($string){ 
    # Split at all position not after the start: ^  
    # and not before the end: $  
    //$string = iconv('gb2312', 'utf-8//ignore', $string); 
    return preg_split('/(?<!^)(?!$)/u', $string); 
}

$string = 'q345e q345d q345c,q345d圆钢,q345e圆钢nm360a耐磨板,欧标s355低合金板 bs700mc汽车板,汽车qste460tm结构钢,船板ah36/eh36/dh36,美标容器板 耐候钢 弹簧钢'; 
//$charlist = mb_str_split($string); 
echo mb_chunk_split($string, 30, '..', true); 
echo '<br>'; 
echo mb_chunk_split($string, 10, '<br>'); 
 
function mb_chunk_split($string, $length, $end = '..', $once = false){ 
    //$string = iconv('gb2312', 'utf-8//ignore', $string);   
    $charlist = mb_str_split($string); 
    $i = 0; 
    $j = 0; 
    $once_array = array(); 
    foreach($charlist as $value){ 
        /* if($once){
          if(($i + $j) > $length){
          $i--; //尽可能少的
          break;
          }
          }else{
          if(($i + $j) >= $length){
          $once_array[] = implode('', array_slice($charlist, $once_leng, $i));
          $once_leng += $i;
          $i = $j = 0;
          }
          } */ 
 
        if(($i + $j) >= $length){ 
            if($once) 
                return implode('', array_slice($charlist, 0, $i-1)) . (count($charlist) <= $i ? '' : $end); 
            $once_array[] = $i; 
            $i = $j = 0; 
        } 
 
 
        if(ord($value) > 127) 
            $j++; //中文算2个宽度 
        /*if($value == ',')
            $j--;*/ 
        $i++; 
    } 
    //末尾补齐 
    if(array_sum($once_array) < count($charlist)) 
        $once_array[] = $i; 
 
    $str_arr = array(); 
    $once_leng = 0; 
    foreach($once_array as $value){ 
        $str_arr[] = implode('', array_slice($charlist, $once_leng, $value)); 
        $once_leng += $value; 
    } 
 
    return implode($end, $str_arr); 
    //return implode('', array_slice($charlist, 0, $i)) . (count($charlist) <= $i ? '' : $end); 
}
?> 

您可能感兴趣的文章:
php中英文混排字符串截取方法
php截取字符串实例代码
php分割中英文字符串的几种方法
php截取字符串(无乱码 utf8)
php截取中文字符串(无乱码)方法
php如何截取字符串后四位
php 中英文混合字符串截取
php字符串函数的简单示例代码
中文字符串长度php代码
php中文字符串截取 php截取中文字符串的代码

关键词: 字符串截取   
[关闭]