php 中文字符串截取乱码
admin
2023-07-01 20:04:25
0

       PHP截取字符串如果是英文直接用substr就可以了,但对于中文字符,用substring可能会导致乱码,那么将如何解决呢?

1、通过函数mb_substr实现

       说明:mb_substr($str, $start, $length, $encoding);通过该函数即可,但需要加载php_mbstring.dll扩展。

案例:

2、通过函数mb_strcut实现


说明:mb_strcut() 和 mb_substr() 类似,都是从一个字符串中提取子字符串,但是按字节数来执行,而不是字符个数。 如果截断位置位于多字节字符两个字节的中间,将于该字符的第一个字节开始执行。 这也是和 substr() 函数的不同之处,后者简单地将字符串在字节之间截断,这将导致一个畸形的字节序列。

3、通过编写的函数(支持UTF-8和GB2312)

案例:

'), array('&', '"', '<', '>'), $string);
     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))>0xa0) 
                { 
                    $tmpstr.= substr($string, $i, 2); 
                } 
                else 
                { 
                    $tmpstr.= substr($string, $i, 1); 
                } 
             } 
             if(ord(substr($string, $i, 1))>0xa0) $i++; 
          } 
          if(strlen($tmpstr)< $strlen ) $tmpstr.= "..."; 
          return $tmpstr; 
        } 
} 

$str = "这是一个字符串切割函数"; 
echo cut_str($str, 8, 0, 'gb2312'); 
?>


相关内容

热门资讯

芬尼能源取得电器盒座及热泵专利... 国家知识产权局信息显示,广东芬尼能源技术有限公司取得一项名为“一种电器盒座及热泵”的专利,授权公告号...
数日前起火的广州长江(中国)轻... 5月31日上午,有网友发视频称,广州长江(中国)轻纺城北区发生火情。多名网友发布的视频显示,一栋印有...
原创 就... 看见中国神舟在太空顺利会师,印度又开始蠢蠢欲动了吗? 5月24日晚,中国神舟二十三号载人飞船在酒...
井云推出OPC专项扶持计划:成... 随着人工智能技术加速演进,“一人公司”(OPC,One Person Company)正从概念走向现...
《荷塘月色》AI生成内容占比超... 来源:市场资讯 (来源:辽望观天下) 眼下,2026届高校毕业生正陆续进入论文答辩阶段,不少高校开始...
西班牙神颜公主首次亮相建军节,... 当地时间5月30日,西班牙迎来了武装部队日(Día de las Fuerzas Ar...
被从肯尼迪中心“除名”,特朗普... 新华社北京5月31日电 在法官29日裁定将美国总统特朗普的名字从肯尼迪表演艺术中心移除后,特朗普在社...
卡斯特罗家的六指孙子,被曝已成... 在古巴政坛,卡斯特罗家族始终是一个绕不开的名字。如今,随着美国与古巴之间出现新的接触迹象,一位长期隐...
国际原子能机构:扎波罗热核电站... 当地时间5月30日,国际原子能机构表示,该机构在扎波罗热核电站的团队已要求进入现场,以第一手方式检查...
燃气灶热电偶熄火保护工作原理是... 燃气灶热电偶熄火保护工作原理是什么啊?工作原理如下:当燃具的火焰熄灭的时候,会导致热电偶产生电流下降...