联系我们
  • 成才热线:
                0531-86996651  86996089
  • 地理位置:
                济南市山大路201号创展中心
                文化东路北100米
  • 乘车路线:
                16路、48路、K94路、112路
                文化东路站
  • PEAQQ群:
                39852963  25515397
  • PHP中文字符串的截取
    发布时间:2007-10-04 07:05:11    作者:匆匆     类别:PHP技术    访问次数:525

          有时候需要把数据库中存储的字符串截取出一部分来显示在页面上,假如字符串的内容中英文混杂的话,可能会出现最后一个字符被截掉一半的问题,出现乱码。解决方法有这么几种:
          1、直接用MySQL提供的字符串操作函数进行截取。比如用left()函数等,它就可以正确地处理中英文,按字符数进行截取,而不是按字节数进行截取。例:
                       select title, left(title,10) from news;
          2、使用php的宽字符函数进行操作。这个需要加入宽字符的扩展支持,具体的做法是,在PHP.INI文件中,去掉mb_string.dll的注释,并重启服务器。这样就可以使用mb_substr()函数进行截取了。例:
                       echo mb_substr('adsf阿达都发生到访asdd', 0, 5, 'gbk');
          3、使用自定义的一些函数进行处理。这些函数在网上可以搜索到,下面附两个:

    function substr_cut($str_cut,$length){
    if (strlen($str_cut) > $length){
    for($i=0; $i < $length; $i++)
    if (ord($str_cut[$i]) > 128) $i++;
    $str_cut = substr($str_cut,0,$i) . "...";
    }
    return $str_cut;
    }


          或者

    function csubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) {
    if(function_exists("mb_substr"))
    return 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);
    $slice = join("",array_slice($match[0], $start, $length));
    if($suffix) return $slice."…";
    return $slice;
    }



    回复:

    请输入验证码: 点击重置图片