php截取utf8字符串和gbk字符串函数
在 PHP 中,我们直接使用PHP strlen函数进行字符串截取,对于英文字符,没有什么区别,输出的结果都是一样的,而在截取中文时,却有一点小小的问题,我们知道,字符分为两种状态,一种是 gbk 字符串,另一种就是 utf-8 字符串,如果按照常规的输出方法,输出的结果是不一样的。
php strlen 函数最基本的参数有 str 字符串,len 长度,start 开始位置,如果截取的字符串 gbk 格式,那么 len 的步长为 1,截取“小虎博客”,只取前两个字符,输出就是“夏日”,而截取的字符串类型是 utf-8 格式的话,那么 len的步长则为 2,输出的结果为“夏日博”,这也就是两种格式输出不一样的原因。
简要说明一下截出输入的步长,以“小虎博客”为例,步长从 0 开始,从开始的“夏”之前开始算起,第一步为0,则“夏”之后为第二步为 1,依此类推。
依照上述原理,我们可以写一个同时支持截取 gbk 和 utf-8 字符的函数,如下:
[code lang="php"]
0x80){
                    for($j=$i;$j<=$i+$step;$j++){   
                        $char .= $string[$j];   
                    }   
                    $i+=$step;   
                }else{   
                    $char = $string[$i];   
                }   
                $index++;   
                if($index>=$start){
                    $length--;
                    $result .= $char;
                }
            }else{
                break;
            }
        }
        return $result;
    }
}
echo cn_substr("败鸟先飞",2,0,"utf-8");  //使用方法
?>
[/code]