PHP兼容utf-8和gbk两种编码方式剪切函数
来源:互联网 发布:哪些淘宝店衣服好看 编辑:程序博客网 时间:2024/06/08 14:45
<?php
/**
* 实现utf-8与gbk中文无乱码截取,提示中文占用‘2’个字符,英文占用‘1’个字符
* @param sting $string 待截取字符串
* @param int $length 截取字符长度,注意截取是字符长度,不是截取‘中文个数’或者‘英文个数’
* @param string $charset 编码方式,只能为‘uft-8与gbk’,默认为‘utf-8’
* @param string $dot 分割符,默认为‘...’
* @return string 已截取的目标字符串
*/
function cutstr($string, $length, $charset = 'utf-8' , $dot = '...') //字符,截取长度,字符集,结尾符
{
if(strlen($string) <= $length) return $string;
$pre = chr(1);
$end = chr(1);
//保护特殊字符串
$string = str_replace( array('&' , '"' , '<' , '>' ), array($pre . '&' . $end, $pre . '"' . $end, $pre . '<' . $end, $pre . '>' . $end), $string);
$strcut = '' ;
if(strtolower($charset) == 'utf-8')
{
$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);
}
else
{
for($i = 0; $i < $length; $i++)
$strcut .= ord($string[$i]) > 127 ? $string[$i] . $string[++$i] : $string[$i];
}
//还原特殊字符串
$strcut = str_replace(array($pre . '&' . $end, $pre . '"' . $end, $pre . '<' . $end, $pre . '>' . $end), array( '&', '"' , '<' , '>'), $strcut);
//修复出现特殊字符串截段的问题
$pos = strrpos($s, chr(1));
if($pos !== false) $strcut = substr( $s, 0, $pos);
return $strcut . $dot;
}
/**
* 测试数据
*/
header("Content-type:text/html; charset=utf-8");
$str = "我爱中华1213我爱中华人民共和国" ;
echo cutstr($str, 6) . '<br />' ; //注意截取是字符长度,不是截取‘中文个数’或者‘英文个数’
echo cutstr($str, 10) . '<br />' ;
echo cutstr($str, 14) . '<br />' ;
?>
- PHP兼容utf-8和gbk两种编码方式剪切函数
- PHP处理数组gbk与utf-8编码互相转换的两种方法
- UTF-8和GBK编码
- UTF-8和GBK编码
- 【GBK、UTF-8、ISO8859-1】三种编码方式总结
- PHP转换编码问题GBK/UTF-8
- PHP中文GBK编码转UTF-8
- PHP转换编码问题GBK/UTF-8
- PHP截取字符串编码(兼容utf-8和gb2312)
- utf-8 和gbk 编码区别
- utf-8 和gbk编码的区别
- GBK、GB2312和UTF-8编码区分
- 关于GBK和UTF-8的编码
- UTF-8 和 GBK 编码的区别
- 中文字符编码之GBK,UTF-16和UTF-8
- 中文字符编码之GBK,UTF-16和UTF-8
- 中文字符编码之GBK,UTF-16和UTF-8
- 中文字符编码之GBK,UTF-16和UTF-8
- PHP大数据文本读取与写入
- 拒绝重装系统,将XP SP3改为SP2
- PHP获取或删除某文件目录的文件名称
- PHP获取文件的后缀
- poj1330 LCA离线算法
- PHP兼容utf-8和gbk两种编码方式剪切函数
- Android Service
- php缓存机制封装【序列化机制】
- emacs 自动补全 auto-complete
- J2ME 拼图游戏 快速开发 全过程 (二)——游戏开始界面设计
- Android学习笔记:Activity-Spinner
- 字符集之 Unicode与字符串对象
- 求助啊~~
- POJ 1637 混合图的欧拉回路