`
hegz
  • 浏览: 441153 次
  • 性别: Icon_minigender_1
  • 来自: 茂名
社区版块
存档分类
最新评论

中文字符串截取(支持gb2312、gbk、utf-8、big5)

    博客分类:
  • PHP
 
阅读更多
    /*
     * 中文字符串截取,支持gb2312/gbk/utf-8/big5
     *
     * @param string $str 要截取的字串
     * @param int $start 截取起始位置
     * @param int $length 截取长度
     * @param string $charset utf-8|gb2312|gbk|big5 编码
     * @param string $suffixChars 后缀字符
     * @param Boolean $suffix 是否加后缀
     */
    public function csubstr($str, $start = 0, $length, $charset = 'gb2312', $suffixChars = '…', $suffix = true)
    {
        if (function_exists("mb_substr")) {
            if (mb_strlen($str, $charset) <= $length) {
                return $str;
            }
             $slice = mb_substr($str, $start, $length, $charset);
          } else {
            $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 . $suffixChars;
        }
        return $slice;
    }
 


再 一个:

       function  cutstr( $string ,  $length ,  $dot  =  ' ...' ) {  
             if  ( strlen  (  $string  ) <=  $length ) {  
                 return   $string ;  
            }  
              
             $string  =  str_replace  (  array  ( '&amp;' ,  '&quot;' ,  '&lt;' ,  '&gt;'  ),  array  ( '&' ,  '"' ,  '<' ,  '>'  ),  $string  );  
              
             $strcut  =  '' ;  
              
            $n  =  $tn  =  $noc  = 0;  
            while  (  $n  <  strlen  (  $string  ) ) {  
                 
                $t  = ord (  $string  [ $n ] );  
                if  ( $t  == 9 ||  $t  == 10 || (32 <=  $t  &&  $t  <= 126)) {  
                    $tn  = 1;  
                    $n  ++;  
                    $noc  ++;  
               }  elseif  (194 <=  $t  &&  $t  <= 223) {  
                    $tn  = 2;  
                    $n  += 2;  
                    $noc  += 2;  
               }  elseif  (224 <=  $t  &&  $t  < 239) {  
                    $tn  = 3;  
                    $n  += 3;  
                    $noc  += 2;  
               }  elseif  (240 <=  $t  &&  $t  <= 247) {  
                    $tn  = 4;  
                    $n  += 4;  
                    $noc  += 2;  
               }  elseif  (248 <=  $t  &&  $t  <= 251) {  
                    $tn  = 5;  
                    $n  += 5;  
                    $noc  += 2;  
               }  elseif  ( $t  == 252 ||  $t  == 253) {  
                    $tn  = 6;  
                    $n  += 6;  
                    $noc  += 2;  
               }  else  {  
                    $n  ++;  
               }  
                 
                if  ( $noc  >=  $length ) {  
                    break ;  
               }  
             
           }  
            if  ( $noc  >  $length ) {  
                $n  -=  $tn ;  
           }  
             
            $strcut  =  substr  (  $string , 0,  $n  );  
            $strcut  =  str_replace  (  array  ( '&' ,  '"' ,  '<' ,  '>'  ),  array  ( '&amp;' ,  '&quot;' ,  '&lt;' ,  '&gt;'  ),  $strcut  );  
             
            return   $strcut  .  $dot ;  
       }
    
     
      分享到:
      评论

      相关推荐

        中文字符串截取(支持各种编码格式)底层实现源码

        for encoding in ['utf-8', 'gbk', 'big5']: try: return data.decode(encoding) except UnicodeDecodeError: pass raise ValueError("无法识别的编码") ``` 5. **处理宽字符与窄字符**:在某些编码中,比如...

        php中支持多种编码的中文字符串截取函数!

        /* * @todo 中文截取,支持gb2312,gbk,utf-8,big5 * * @param string $str 要截取的字串 * @param int $start 截取起始位置 * @param int $length 截取长度 * @param string $charset utf-...

        关于java按字节截取带有汉字的字符串的解法

        需要注意的是,不同编码方式(如GBK、Big5等)下的汉字可能占用不同数量的字节,因此在实际应用中,需要根据字符串的实际编码方式进行调整。如果你的字符串是其他编码格式,你需要将`getBytes(StandardCharsets.UTF_...

        php截取字符串之截取utf8或gbk编码的中英文字符串示例

        同时,对于中文字符的处理,开发者应当考虑到不同的字符集和编码方式(如BIG5、GBK、GB2312等),可能会导致不同的计算结果,选择合适的处理策略。 为了编写健壮的代码,开发者可以通过多种方式测试和验证字符计数...

        php中计算中文字符串长度、截取中文字符串的函数代码

        另一个截取中文字符串的通用方法是`csubstr`函数,它可以处理不同的字符编码,如`utf-8`, `gb2312`, `gbk`, 和 `big5`。这个函数使用`mb_substr`函数(如果存在)来执行截取,或者使用正则表达式匹配和字符数组切片...

        THINKPHP截取中文字符串函数实例代码

        正则表达式部分是针对不同编码(如UTF-8、GB2312、GBK和Big5)设计的,用来匹配特定编码下的单个字符。通过`preg_match_all`匹配所有符合规则的字符,并使用`array_slice`来获取指定范围内的字符,然后用`join`连接...

        php自动获取字符串编码函数mb_detect_encoding

        $encode = mb_detect_encoding($keytitle, array('GBK', 'UTF-8', 'ASCII', 'GB2312', 'BIG5'), true); ``` 这里的第三个参数`true`代表启用`strict`模式,它会更严格地检查编码,从而可能提高识别的准确性。但需要...

        php的GD库imagettftext函数解决中文乱码问题

        对于处理中文字符串,了解不同的字符编码(如GBK、GB2312、Big5、UTF-8等)及其转换至关重要。`iconv()`函数是PHP中进行字符编码转换的利器,它可以有效地解决因编码不匹配导致的乱码问题。在实际开发中,确保正确...

        经典php冒泡排序面试题

        `CSubstr`函数是更为通用的多字节字符集字符串截取函数,支持GB2312、GBK、UTF-8和BIG5等编码。首先检查是否支持`mb_substr`函数,如果有则直接使用,否则使用正则表达式匹配字符集的特征,进行截取。 这些函数的...

        ThinkPHP的截取字符串函数无法显示省略号的解决方法

        在实现自定义的msubstr函数时,需要处理不同字符集的编码规则,包括UTF-8、GBK、GB2312和Big5等常见的编码方式。这里使用了正则表达式来匹配和处理不同编码规则的字符串,然后根据传入的字符集参数进行匹配。使用...

        ThinkPHP 模板substr的截取字符串函数详解

        `msubstr`函数的主要目的是兼容不同的多字节字符集(如UTF-8、GBK、GB2312等),确保在没有`mb_substr`或`iconv_substr`函数可用的情况下也能正常工作。以下是`msubstr`函数的详细说明: ```php function msubstr($...

        thinkphp中字符截取函数msubstr()用法分析

        也可以指定为其他字符集,如gb2312、gbk、big5等。 - $suffix=true:是否在截取后的字符串末尾添加省略号,默认为true表示添加。如果设置为false,则不添加。 在实际使用中,msubstr()函数常被用在模板标签中,如:...

        易语言简体繁体互转

        6. **字符编码理解**:在处理中文字符时,需要理解不同的字符编码标准,例如GBK、Big5、UTF-8等,以及它们在简体和繁体中文之间的关系。这有助于确保转换的正确性,防止乱码问题。 7. **程序设计与调试**:在实际...

        易语言-易语言编码取字

        在计算机中,文本数据是以特定的编码形式存储的,常见的有ASCII、GB2312、GBK、UTF-8等。编码取字就是指根据特定的编码规则,将数字(字节序列)转换成可读的字符或者从字符反向获取其对应的数字表示的过程。在...

        Unicode文本处理模块

        2. **字符编码转换**:模块可能提供了将UTF-8、UTF-16等常见Unicode编码与其他编码(如GBK、BIG5等)相互转换的功能。 3. **文本搜索与替换**:支持在Unicode文本中进行关键词查找和替换操作,不受字符集限制。 4....

      Global site tag (gtag.js) - Google Analytics