前几天,去面试中遇到一个帮毕业就遇到的问题,PHP截取中文字符串乱码问题。究其根本php的字符串截取函数是根据字节来的,而汉字的编码一需要的不单单一个字节,那么自然就会出现乱码问题。
现在常用的编码格式是UTF8,GBK,GBK2312,BIG5。GBK是GBK2312的升级。现在我开发中遇到的基本都是UTF8,GBK常用在论坛BBS上。今天自己写了下UTF8的,测试下还说的过去,毕竟从网上拷下来的是可以用,但是如果有时间最好还是自己写一下,这样只有到自己手里的才是自己的。
今天写了UTF8的中文字符截取,不单单是截取从零开始,可以指定位置开始,当然如果是中文那么会中文下一个字符开始,结束是从指定的位置或者指定的汉字结束位置。
函数代码:
- function subUTF8str($str,$start=0,$length=80){
- $str_length = strlen($str);
- $end_length = $start + $length;
- $cut_length = 0;
- $cut_end = $cut_begin = false;
-
- if($start >= $str_length){
- return null;
- }
- if( ($start == 0) && ($length >= $str_length) ){
- return $str;
- }
- for($i=0; $i <= $str_length; $i++){
- if( ($start <= $i) && ($cut_begin === false) ){
- $cut_begin = $i;
- }
- if (ord($str[$i]) > 127){
- $i += 2;
- $cut_begin?$cut_length += 3:null;
- }else{
- $cut_begin?$cut_length += 1:null;
- }
-
- if( ($end_length <= $i) && ($cut_end === false) ){
- break;
- }
- }
-
- return substr($str, $cut_begin , $cut_length );
- }
整体测试代码
- header("Content-type:text/html;charset=UTF-8");
- set_time_limit(0);
- $str = '';
- for($i=0;$i<1000;$i++){
- $str .='这里是截cefaACC截$%^&*截()_((截^&*^截*&%截%';
- }
-
- function subUTF8str($str,$start=0,$length=80){
- $str_length = strlen($str);
- $end_length = $start + $length;
- $cut_length = 0;
- $cut_end = $cut_begin = false;
-
- if($start >= $str_length){
- return null;
- }
- if( ($start == 0) && ($length >= $str_length) ){
- return $str;
- }
- for($i=0; $i <= $str_length; $i++){
- if( ($start <= $i) && ($cut_begin === false) ){
- $cut_begin = $i;
- }
- if (ord($str[$i]) > 127){
- $i += 2;
- $cut_begin?$cut_length += 3:null;
- }else{
- $cut_begin?$cut_length += 1:null;
- }
-
- if( ($end_length <= $i) && ($cut_end === false) ){
- break;
- }
- }
-
- return substr($str, $cut_begin , $cut_length );
- }
- echo time().'<br/>';
- for($i=0;$i<1000;$i++){
- $begin = rand(1,100);
- $length = rand(1,1000);
- echo subUTF8str($str,$begin,$length)."\n";
- }
- echo time().'<br/>';
下次有机会写其他编码格式的
本文转自kefirking 51CTO博客,原文链接:,http://blog.51cto.com/phpzf/794660如需转载请自行联系原作者
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。