当前位置: 首页 > 图文教程 > 网络编程 > PHP > PHP 字符串编码截取函数(兼容utf-8和gb2312)

PHP
基于HTTP长连接的"服务器推"技术的php 简易聊天室
PHP 程序员应该使用的10个组件
phpmailer 中文使用说明(简易版)
php 调用远程url的六种方法小结
PHP+XML 制作简单的留言本 图文教程
PHP+MySQL 制作简单的留言本
初学CAKEPHP 基础教程
网页游戏开发入门教程二(游戏模式+系统)
网页游戏开发入门教程三(简单程序应用)
PHP 向右侧拉菜单实现代码,测试使用中
PHP 压缩文件夹的类代码
PHP CKEditor 上传图片实现代码
php 将excel导入mysql
php 向访客和爬虫显示不同的内容
php实现网站插件机制的方法
PHP 远程关机实现代码
超级简单的php+mysql留言本源码
PHP 面向对象实现代码
php 分库分表hash算法
计算一段日期内的周末天数的php代码(星期六,星期日总和)

PHP 字符串编码截取函数(兼容utf-8和gb2312)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 272 ::
收藏到网摘: n/a

昨天晚上和今天上午看了字符编码的问题,还有一些别人截取字符串的函数,自己也写了一个,兼容utf-8和gb2312的
复制代码 代码如下:

//截取字符串长度。支持utf-8和gb2312编码。若为gb2312,先将其转为utf-8,在utf-8的基础上截取然后再转换回来
function cut_string($str,$from=1,$length=10,$code='utf-8',$rear='...'){
if($code!='utf-8'){//总是将字符串转为utf-8编码
$str=iconv($code,'utf-8',$str);
}
$str_len=mb_strlen($str,'utf-8');//字符串的长度
if($from>$str_len){//如果截取开始位置大于字符串长度,截取后面$length个
$from=$str_len-$length+1;
$from=($from<1?1:$from);
}
//兼容ucs-4编码
$i=0;//字节计数
$from_i=0;//开始截取的字节位置
$from_len=0;//开始截取的字符位置
$tag=true;//标志$from_len是否已经被赋值
for($temp_len=0;($temp_len-$from_len<$length)||$tag;$temp_len++){
$byte_code=ord(substr($str,$i,1));//一个字节的编码
if($temp_len+1==$from){//记录开始截取的开始字节位置
$from_i=$i;$from_len=$temp_len;$tag=false;
}
if($byte_code>=0&&$byte_code<128){//字符是占用几个字节,utf-8是变长编码,根据每个字符的第一个字节可判断出该字符占几个字节
$i++;
}
if($byte_code>191&&$byte_code<224){
$i+=2;
}
if($byte_code>223&&$byte_code<240){
$i+=3;
}
if($byte_code>239&&$byte_code<248){
$i+=4;
}
if($byte_code>248&&$byte_code<252){
$i+=5;
}
if($byte_code>252&&$byte_code<255){
$i+=6;
}
}
return iconv('utf-8',$code,substr($str,$from_i,$i-$from_i).$rear);
}