zoukankan      html  css  js  c++  java
  • [原]PHP中英文混合截取

    默认中文占两个英的宽度..(为解决截取中英文宽度很难一至的问题...主要为排序)

    以下为处理函数..不是太佳..望高手指教

     1 <?php
    2
    3 function mb_str_split($string){
    4 # Split at all position not after the start: ^
    5 # and not before the end: $
    6 //$string = iconv('gb2312', 'utf-8//ignore', $string);
    7 return preg_split('/(?<!^)(?!$)/u', $string);
    8 }
    9
    10 $string = 'q345e q345d q345c,q345d圆钢,q345e圆钢nm360a耐磨板,欧标s355低合金板 bs700mc汽车板,汽车qste460tm结构钢,船板ah36/eh36/dh36,美标容器板 耐候钢 弹簧钢';
    11 //$charlist = mb_str_split($string);
    12 echo mb_chunk_split($string, 30, '..', true);
    13 echo '<br>';
    14 echo mb_chunk_split($string, 10, '<br>');
    15
    16
    17 function mb_chunk_split($string, $length, $end = '..', $once = false){
    18 //$string = iconv('gb2312', 'utf-8//ignore', $string);
    19 $charlist = mb_str_split($string);
    20 $i = 0;
    21 $j = 0;
    22 $once_array = array();
    23 foreach($charlist as $value){
    24 /* if($once){
    25 if(($i + $j) > $length){
    26 $i--; //尽可能少的
    27 break;
    28 }
    29 }else{
    30 if(($i + $j) >= $length){
    31 $once_array[] = implode('', array_slice($charlist, $once_leng, $i));
    32 $once_leng += $i;
    33 $i = $j = 0;
    34 }
    35 } */
    36
    37 if(($i + $j) >= $length){
    38 if($once)
    39 return implode('', array_slice($charlist, 0, $i-1)) . (count($charlist) <= $i ? '' : $end);
    40 $once_array[] = $i;
    41 $i = $j = 0;
    42 }
    43
    44
    45 if(ord($value) > 127)
    46 $j++; //中文算2个宽度
    47 /*if($value == ',')
    48 $j--;*/
    49 $i++;
    50 }
    51 //末尾补齐
    52 if(array_sum($once_array) < count($charlist))
    53 $once_array[] = $i;
    54
    55 $str_arr = array();
    56 $once_leng = 0;
    57 foreach($once_array as $value){
    58 $str_arr[] = implode('', array_slice($charlist, $once_leng, $value));
    59 $once_leng += $value;
    60 }
    61
    62 return implode($end, $str_arr);
    63 //return implode('', array_slice($charlist, 0, $i)) . (count($charlist) <= $i ? '' : $end);
    64 }
    65
    66 ?>
    
    
    作者:wc1217 发表于2012-3-5 16:56:52 原文链接
    阅读:5 评论:0 查看评论
  • 相关阅读:
    一月份反思内容:BUG & Communicate
    重构一个繁琐的数据结构
    GTD(Get Things Done)
    SortedList<TKey,TValue> 和 SortedDictionary<TKey,TValue>
    对Ado.net Entity Data Model Designer很失望
    A class to clone objects
    collection.All(x=> whatever(x)) 与 collection.Any(x=>whatever(x))
    Asp.net MVC里的TempData是一个整体
    Some tips about ubuntu server | or it may works on other linux distributions too
    每个程序员都必须遵守的编程原则
  • 原文地址:https://www.cnblogs.com/wc1217/p/2387566.html
Copyright © 2011-2022 走看看