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 查看评论
  • 相关阅读:
    hdu 5446 Unknown Treasure lucas和CRT
    Hdu 5444 Elven Postman dfs
    hdu 5443 The Water Problem 线段树
    hdu 5442 Favorite Donut 后缀数组
    hdu 5441 Travel 离线带权并查集
    hdu 5438 Ponds 拓扑排序
    hdu 5437 Alisha’s Party 优先队列
    HDU 5433 Xiao Ming climbing dp
    hdu 5432 Pyramid Split 二分
    Codeforces Round #319 (Div. 1) B. Invariance of Tree 构造
  • 原文地址:https://www.cnblogs.com/wc1217/p/2387566.html
Copyright © 2011-2022 走看看