/**
*
* 中英混合字符串长度判断
* @param unknown_type $str
* @param unknown_type $charset
*/
function strLength($str, $charset = 'utf-8')
{
if ($charset == 'utf-8'){
$str = iconv('utf-8', 'gb2312', $str);
}
$num = strlen($str);
$cnNum = 0;
for ($i = 0; $i < $num; $i++) {
if (ord(substr($str, $i + 1, 1)) > 127) {
$cnNum++;
$i++;
}
}
$enNum = $num - ($cnNum * 2);
$number = ($enNum / 2) + $cnNum;
return ceil($number);
} /**
*
* 中英混合的字符串截取
* @param unknown_type $sourcestr
* @param unknown_type $cutlength
*/
function cut_str($sourcestr, $cutlength)
{
$returnstr = '';
$i = 0;
$n = 0;
$str_length = strlen($sourcestr); //字符串的字节数
while (($n < $cutlength) and ($i <= $str_length)) {
$temp_str = substr($sourcestr, $i, 1);
$ascnum = Ord($temp_str); //得到字符串中第$i位字符的ascii码
if ($ascnum >= 224) //如果ASCII位高与224,
{
$returnstr = $returnstr . substr($sourcestr, $i, 3); //根据UTF-8编码规范,将3个连续的字符计为单个字符
$i = $i + 3; //实际Byte计为3
$n++; //字串长度计1
} elseif ($ascnum >= 192) //如果ASCII位高与192,
{
$returnstr = $returnstr . substr($sourcestr, $i, 2); //根据UTF-8编码规范,将2个连续的字符计为单个字符
$i = $i + 2; //实际Byte计为2
$n++; //字串长度计1
} elseif ($ascnum >= 65 && $ascnum <= 90) //如果是大写字母,
{
$returnstr = $returnstr . substr($sourcestr, $i, 1);
$i = $i + 1; //实际的Byte数仍计1个
$n++; //但考虑整体美观,大写字母计成一个高位字符
} else //其他情况下,包括小写字母和半角标点符号,
{
$returnstr = $returnstr . substr($sourcestr, $i, 1);
$i = $i + 1; //实际的Byte数计1个
$n = $n + 0.5; //小写字母和半角标点等与半个高位字符宽...
}
}
if ($str_length > $cutlength) {
$returnstr = $returnstr . "..."; //超过长度时在尾处加上省略号
}
return $returnstr;
} /**
* PHP实现中文字串截取无乱码的方法
* @param $string
* @param $start
* @param $length
* @return string
*/
function GBsubstr($string, $start, $length)
{
if (strlen($string) > $length) {
$str = null;
$len = $start + $length;
for ($i = $start; $i < $len; $i++) {
if (ord(substr($string, $i, 1)) > 0xa0) {
$str .= substr($string, $i, 2);
$i++;
} else {
$str .= substr($string, $i, 1);
}
}
return $str . '...';
} else {
return $string;
}
} function substr_text($str, $start = 0, $length, $charset = "utf-8", $suffix = "")
{
if (function_exists("mb_substr")) {
return mb_substr($str, $start, $length, $charset) . $suffix;
} elseif (function_exists('iconv_substr')) {
return iconv_substr($str, $start, $length, $charset) . $suffix;
}
$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
preg_match_all($re[$charset], $str, $match);
$slice = join("", array_slice($match[0], $start, $length));
return $slice . $suffix;
}

最新文章

  1. .NET基础拾遗(1)类型语法基础和内存管理基础
  2. asp.net MVC中获取当前URL/Controller/Action
  3. jQuery上定义插件并重设插件构造函数
  4. ELK-Python(三)
  5. myEclipse使用有感
  6. MySQL中ON DUPLICATE KEY UPDATE使用
  7. 一款功能强大的iphone购物应用源码
  8. Python性能分析指南 - 技术翻译 - 开源中国社区
  9. 怎样下载并编译Android4.0内核源代码goldfish(图文)
  10. 已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭
  11. 两个HTML地址栏传中文参数乱码
  12. 菜鸟玩云计算之二十:saltstack入门初步
  13. js插入HTML代码,渲染页面
  14. swiper嵌套小demo(移动端触摸滑动插件)
  15. Dom捕捉事件和冒泡事件-原理与demo测试
  16. Docker容器集群管理之Swarm
  17. ---转载---phython资料
  18. Windows 常识大全【all】
  19. 在js中 把 json对象转化为String对象的方法
  20. poj2895

热门文章

  1. 【Android】资源系列(一) -- 国际化(多语言)
  2. spring装配集合
  3. js对象和json的区别
  4. YTU 2776: 小壮的习惯
  5. 交换排序(2)——冒泡排序(bubble sort)
  6. 码位(code position/point)Unicode 编码与 Python 2/3 编码兼容性问题
  7. P2251 质量检测(ST表)
  8. Windows虚拟机中无法传输Arduino程序的问题
  9. 修改docker-toolbox/boot2docker容器镜像
  10. fastjson读取json配置文件