zoukankan      html  css  js  c++  java
  • 几个好用的截取字符串的php函数分享

    分享几个好用的PHP 截取字符串函数(支持gb2312和utf-8)。

    1、截取GB2312字符用的函数

    <?php 
    /**
    **截取中文字符串 
    * edit by www.jbxue.com
    **/
    function mysubstr($str, $start, $len) { 
    $tmpstr = ""; 
    $strlen = $start + $len; 
    for($i = 0; $i < $strlen; $i++) { 
    if(ord(substr($str, $i, 1)) > 0xa0) { 
    $tmpstr .= substr($str, $i, 2); 
    $i++; 
    } else 
    $tmpstr .= substr($str, $i, 1); 
    } 
    return $tmpstr; 
    } 
    ?>

    2. 截取utf8编码的多字节字符串

    <?php 
    /**
    * 截取utf8字符串
    * edit by www.jbxue.com
    */
    function utf8Substr($str, $from, $len) 
    { 
    return preg_replace('#^(?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$from.'}'. 
    '((?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$len.'}).*#s', 
    '$1',$str); 
    } 
    ?>

    3. UTF-8、GB2312都支持的汉字截取函数

    <?php 
    /* 
    Utf-8、gb2312都支持的汉字截取函数 
    cut_str(字符串, 截取长度, 开始长度, 编码); 
    编码默认为 utf-8 
    开始长度默认为 0 
    * by www.jbxue.com
    */
    
    function cut_str($string, $sublen, $start = 0, $code = 'UTF-8') 
    { 
    if($code == 'UTF-8') 
    { 
    $pa = "/[x01-x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1-xef][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-xbf][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf]/"; 
    preg_match_all($pa, $string, $t_string);
    
    if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."..."; 
    return join('', array_slice($t_string[0], $start, $sublen)); 
    } 
    else 
    { 
    $start = $start*2; 
    $sublen = $sublen*2; 
    $strlen = strlen($string); 
    $tmpstr = '';
    
    for($i=0; $i< $strlen; $i++) 
    { 
    if($i>=$start && $i< ($start+$sublen)) 
    { 
    if(ord(substr($string, $i, 1))>129) 
    { 
    $tmpstr.= substr($string, $i, 2); 
    } 
    else 
    { 
    $tmpstr.= substr($string, $i, 1); 
    } 
    } 
    if(ord(substr($string, $i, 1))>129) $i++; 
    } 
    if(strlen($tmpstr)< $strlen ) $tmpstr.= "..."; 
    return $tmpstr; 
    } 
    }
    
    $str = "abcd需要截取的字符串"; 
    echo cut_str($str, 8, 0, 'gb2312'); 
    ?>

    4. BugFree 的字符截取函数

    <?php 
    /** 
    * @package BugFree 
    * 
    * Return part of a string(Enhance the function substr()) 
    * 
    * @author Chunsheng Wang <wwccss@263.net> 
    * @param string $String the string to cut. 
    * @param int $Length the length of returned string. 
    * @param booble $Append whether append "...": false|true 
    * @return string the cutted string. 
    * @by www.jbxue.com
    */ 
    function sysSubStr($String,$Length,$Append = false) 
    { 
    if (strlen($String) < = $Length ) 
    { 
    return $String; 
    } 
    else 
    { 
    $I = 0; 
    while ($I < $Length) 
    { 
    $StringTMP = substr($String,$I,1); 
    if ( ord($StringTMP) >=224 ) 
    { 
    $StringTMP = substr($String,$I,3); 
    $I = $I + 3; 
    } 
    elseif( ord($StringTMP) >=192 ) 
    { 
    $StringTMP = substr($String,$I,2); 
    $I = $I + 2; 
    } 
    else 
    { 
    $I = $I + 1; 
    } 
    $StringLast[] = $StringTMP; 
    } 
    $StringLast = implode("",$StringLast); 
    if($Append) 
    { 
    $StringLast .= "..."; 
    } 
    return $StringLast; 
    } 
    }
    
    $String = "book.chinaz.com -- 站长书库、站长教程"; 
    $Length = "18"; 
    $Append = false; 
    echo sysSubStr($String,$Length,$Append); 
    ?>
  • 相关阅读:
    HDU3145 Max Sum of Max-K-sub-sequence (单调队列模板)
    AcWing1088 旅行问题(单调队列)
    POJ1821 Fence(单调队列)
    POJ1742 Coins(多重背包+二进制优化)
    AcWing217 绿豆蛙的归宿(期望)
    BZOJ.2134.[国家集训队]单选错位(概率 递推)
    洛谷.3805.[模板]manacher算法
    Codeforces.280C.Game on Tree(期望)
    BZOJ.2521.[SHOI2010]最小生成树(最小割ISAP/Dinic)
    洛谷.4172.[WC2006]水管局长(LCT Kruskal)
  • 原文地址:https://www.cnblogs.com/study100/p/3207904.html
Copyright © 2011-2022 走看看