求助,小弟现在遇到个问题。在PHP中截取字符串长度,在处理有,有可能字符串中会有特殊号,如/ , . \ 之类的,我要是想取这个字符串长度为15个字符,遇到这样的字符他就会出错。数据库是存进去了,不过取的时候他就会出错出现类似于方框之类的特殊字符,求助有没有办法让这种情况下,取整字的办法?在线等。例如:业务经理/经理  他现在取出来的就是:业务经理/□□

解决方案 »

  1.   

    存入数据库前用addslashes(string s)函数处理一下。
      

  2.   

    说明你存储的时候分隔到了汉字,可以这样读取汉字:
    //统计总字数       
            function get_page_word(){       
                $this->sum_word = $this->strlen_utf8($this->pagestr);  //获得总字数     
                return $this->sum_word;       
            }         function strlen_utf8($str){       
               $i = 0;       
               $count = 0;       
               $len = strlen ($str);       
               while ($i < $len){       
                   $chr = ord ($str[$i]);   //ord(string) 获得string的ascii值的字符串    
                   $count++;       
                   $i++;       
                   if ($i >= $len)       
                       break;       
                   if ($chr & 0x80){   //0x80是指十六进制数 汉字的字节编码一般在0x80内,大于0x80的数会被认为是负数,不合汉字的形式。   
                       $chr <<= 1;       
                       while ($chr & 0x80) {       
                           $i++;       
                           $chr <<= 1;       
                       }       
                   }       
               }       
               return $count;       
            }然后再对sum_word进行分隔。一般都是采用explode和substr函数进行操作。
      

  3.   


    /**
    * 截取字符串
    *
    * @access   public
    * @param    $str[string]      待截取的字符串
    * @param    $start[number]    开始截取位置      [default]0
    * @param    $length[number]   截取长度          [default]20
    * @param    $suffix[string]   截取后后缀        [default]NULL
    * @param    $charset[string]  字符串编码        [default]utf8
    * @return   string
    */
    function CsubStr($str, $start=0, $length=20, $suffix='', $charset="utf8"){
        if ( '' == $str || is_null($str) || is_bool($str) )
            return $str;
    if ( function_exists("mb_substr") ){
    $str  = (mb_strlen($str) > $length)
                  ? mb_substr($str, $start, $length, $charset) . $suffix
                  : $str;
            unset($start, $length, $suffix, $charset, $re, $match);
            return $str;
    }
        if ( function_exists('iconv_substr') ) {
    $str  = (iconv_strlen($str,$charset) > $length)
                  ? iconv_substr($str, $start, $length, $charset) . $suffix
                  : $str;
            unset($start, $length, $suffix, $charset, $re, $match);
    return $str;
    }
    $re['utf8']   = "/[\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 = implode('', array_slice($match[0], $start, $length)) . $suffix;
        unset($str, $start, $length, $suffix, $charset, $re, $match);
    return $slice;
    }