在做PHP开发的时候,由于我国的语言环境问题,所以我们常常需要对中文进行处理。在PHP中,我们都知道有专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数并非PHP的核心函数,所以,它们常常有可能没有开启。当然,如果是用的自己的服务器,则只要在php.ini中开启即可。如果是用的虚拟主机,而服务器又没有开启这方面的函数的话,那就需要我们自己写出点适合咱国情的函数来了。
   
   
    
  
  
   以下几个函数用起来颇为顺手的。不过要知道,得在utf-8环境下使用。
  
  
   
  
  
   
  
  
   
  
  
   
    function
   
   
    abslength(
   
   
    $str
   
   
    )
   
  
  
   
   
   
    if
   
   
    (
   
   
    empty
   
   
    (
   
   
    $str
   
   
    )){
   
  
  
   
   
   
    return
   
   
    0;
   
  
  
   
   
   
    if
   
   
    (function_exists(
   
   
    'mb_strlen'
   
   
    )){
   
  
  
   
   
   
    return
   
   
    mb_strlen(
   
   
    $str
   
   
    ,
   
   
    'utf-8'
   
   
    );
   
  
  
   
   
   
    else
   
   
    {
   
  
  
   
   
   
    preg_match_all(
   
   
    "/./u"
   
   
    ,
   
   
    $str
   
   
    ,
   
   
    $ar
   
   
    );
   
  
  
   
   
   
    return
   
   
    count
   
   
    (
   
   
    $ar
   
   
    [0]);
   
  
  
   
    $str
   
   
    =
   
   
    '我们都是中国人啊,ye!'
   
   
    ;
   
  
  
   
    $len
   
   
    = abslength(
   
   
    $str
   
   
    );
   
  
  
   
    var_dump(
   
   
    $len
   
   
    );
   
   
  
  
   
    $len
   
   
    = abslength(
   
   
    $str
   
   
    ,
   
   
    '1'
   
   
    );
   
  
  
   
    echo
   
   
    '<br />'
   
   
    .
   
   
    $len
   
   
    ;
   
   
  
  
   
   
   
  
  
   
   
   
  
  
   
   
   
  
  
   
   
   
  
  
   
    function
   
   
    utf8_substr(
   
   
    $str
   
   
    ,
   
   
    $start
   
   
    =0) {
   
  
  
   
   
   
    if
   
   
    (
   
   
    empty
   
   
    (
   
   
    $str
   
   
    )){
   
  
  
   
   
   
    return
   
   
    false;
   
  
  
   
   
   
    if
   
   
    (function_exists(
   
   
    'mb_substr'
   
   
    )){
   
  
  
   
   
   
    if
   
   
    (func_num_args() >= 3) {
   
  
  
   
   
   
    $end
   
   
    = func_get_arg(2);
   
  
  
   
   
   
    return
   
   
    mb_substr(
   
   
    $str
   
   
    ,
   
   
    $start
   
   
    ,
   
   
    $end
   
   
    ,
   
   
    'utf-8'
   
   
    );
   
  
  
   
   
   
    else
   
   
    {
   
  
  
   
   
   
    mb_internal_encoding(
   
   
    "UTF-8"
   
   
    );
   
  
  
   
   
   
    return
   
   
    mb_substr(
   
   
    $str
   
   
    ,
   
   
    $start
   
   
    );
   
  
  
   
   
   
    else
   
   
    {
   
  
  
   
   
   
    $null
   
   
    =
   
   
    ""
   
   
    ;
   
  
  
   
   
   
    preg_match_all(
   
   
    "/./u"
   
   
    ,
   
   
    $str
   
   
    ,
   
   
    $ar
   
   
    );
   
  
  
   
   
   
    if
   
   
    (func_num_args() >= 3) {
   
  
  
   
   
   
    $end
   
   
    = func_get_arg(2);
   
  
  
   
   
   
    return
   
   
    join(
   
   
    $null
   
   
    ,
   
   
    array_slice
   
   
    (
   
   
    $ar
   
   
    [0],
   
   
    $start
   
   
    ,
   
   
    $end
   
   
    ));
   
  
  
   
   
   
    else
   
   
    {
   
  
  
   
   
   
    return
   
   
    join(
   
   
    $null
   
   
    ,
   
   
    array_slice
   
   
    (
   
   
    $ar
   
   
    [0],
   
   
    $start
   
   
    ));
   
  
  
   
    $str2
   
   
    =
   
   
    'wo要截取zhongwen'
   
   
    ;
   
  
  
   
    echo
   
   
    '<br />'
   
   
    ;
   
  
  
   
    echo
   
   
    utf8_substr(
   
   
    $str2
   
   
    ,0,-4);
   
   
  
  
   
    public
   
   
    function
   
   
    csubstr(
   
   
    $str
   
   
    ,
   
   
    $start
   
   
    =0,
   
   
    $length
   
   
    ,
   
   
    $charset
   
   
    =
   
   
    "utf-8"
   
   
    ,
   
   
    $suffix
   
   
    =true)
   
  
  
   
   
   
    if
   
   
    (function_exists(
   
   
    "mb_substr"
   
   
    ))
   
  
  
   
   
   
    if
   
   
    (mb_strlen(
   
   
    $str
   
   
    ,
   
   
    $charset
   
   
    ) <=
   
   
    $length
   
   
    )
   
   
    return
   
   
    $str
   
   
    ;
   
  
  
   
   
   
    $slice
   
   
    = mb_substr(
   
   
    $str
   
   
    ,
   
   
    $start
   
   
    ,
   
   
    $length
   
   
    ,
   
   
    $charset
   
   
    );
   
  
  
   
   
   
    $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
   
   
    );
   
  
  
   
   
   
    if
   
   
    (
   
   
    count
   
   
    (
   
   
    $match
   
   
    [0]) <=
   
   
    $length
   
   
    )
   
   
    return
   
   
    $str
   
   
    ;
   
  
  
   
   
   
    $slice
   
   
    = join(
   
   
    ""
   
   
    ,
   
   
    array_slice
   
   
    (
   
   
    $match
   
   
    [0],
   
   
    $start
   
   
    ,
   
   
    $length
   
   
    ));
   
  
  
   
   
   
    if
   
   
    (
   
   
    $suffix
   
   
    )
   
   
    return
   
   
    $slice
   
   
    .
   
   
    "…"
   
   
    ;
   
  
  
   
   
   
    return
   
   
    $slice
   
   
    ;
   
  
  
   本文转自:
   
    github