//方法一:(借鉴于thinkphp中的中英文字符截取)

function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) {if(function_exists("mb_substr"))$slice = mb_substr($str, $start, $length, $charset);elseif(function_exists('iconv_substr')) {$slice = iconv_substr($str,$start,$length,$charset);if(false === $slice) {$slice = '';}}else{$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 $suffix ? $slice.'...' : $slice;
}//方法二:(借鉴于phpcms中的中英文截取)

function str_cut($string, $length, $dot = '...') {$strlen = strlen($string);if($strlen <= $length) return $string;$string = str_replace(array(' ',' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), array('∵',' ', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), $string);$strcut = '';if(strtolower(CHARSET) == 'utf-8') {$length = intval($length-strlen($dot)-$length/3);$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);$strcut = str_replace(array('∵', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), $strcut);} else {$dotlen = strlen($dot);$maxi = $length - $dotlen - 1;$current_str = '';$search_arr = array('&',' ', '"', "'", '“', '”', '—', '<', '>', '·', '…','∵');$replace_arr = array('&',' ', '"', ''', '“', '”', '—', '<', '>', '·', '…',' ');$search_flip = array_flip($search_arr);for ($i = 0; $i < $maxi; $i++) {$current_str = ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];if (in_array($current_str, $search_arr)) {$key = $search_flip[$current_str];$current_str = str_replace($search_arr[$key], $replace_arr[$key], $current_str);}$strcut .= $current_str;}}return $strcut.$dot;
}

转载于:https://www.cnblogs.com/qhorse/p/4772307.html

自定义方法中英文字符截取相关推荐

  1. C#中进行中英文字符截取(中文2个长度,英文1个)

    前言 最近项目有个需求,就是截取文本,区分中英文字符,中文算2个长度,英文算1个长度,截取后增加-,占3个长度(包括在限制长度内),需求不复杂,想要写出较好的方法,得稍稍费点心思,下面是笔者写的代码, ...

  2. 中英文字符大小和文本边界问题

    中英文字符大小和文本边界问题 也不知道是楼主的问题还是CSDN的问题,楼主最近的博客在贴代码的时候出现了问题,明明把代码贴进去了,还是没有代码的效果,好吧.先这样吧,过几天再看看到底是啥情况. ASC ...

  3. C#网络编程(四、Socket中英文字符大小和文本边界问题)

    转自:http://blog.csdn.net/shanyongxu/article/details/51190820,本人学习受益匪浅,楼主把重点都标记出来了,请点击链接查看原文,尊重楼主大大版权. ...

  4. oracle 并接去掉字符串,ORACLE删除字符-TRIM字符截取-substr查找字符-instr

    TRIM函数,最简单的功能就是来去除字符串的行首和行尾的空格,返回值类型是varchar2; 1.TRIM函数的完整语法描述 TRIM([{{LEADING | TRAILING | BOTH} [ ...

  5. thinkphp字符截取函数msubstr()

    ThinkPHP有一个内置字符截取函数msubstr()如下: msubstr($str, $start=0, $length, $charset="utf-8″, $suffix=true ...

  6. 区分中英文字符的两种方法: 正则和charCodeAt()方法

    最近在为项目写登录注册系列页面, 表单验证无疑是不可缺少的部分, 在这个jQ插件满天飞的web年代, 表单验证倒也不是难事. 但再好的插件, 也并不能做到十全十美, 比如这次用到的我先前介绍过的Van ...

  7. 【opencv】opencv在图片、视频嵌中英文字符的方法

    说明:本博文是根据前人已有的成果并结合自己的理解而成的.为了避免让读者感到繁琐,我将运用小学及初中学习的总分总.承上启下的写作技巧进行讲解,力图做到详略有致,言简意赅,图文并茂,通俗易懂. 实验平台: ...

  8. php中msubstr,PHP学习:thinkphp中字符截取函数msubstr()用法分析

    <PHP学习:thinkphp中字符截取函数msubstr()用法分析>要点: 本文介绍了PHP学习:thinkphp中字符截取函数msubstr()用法分析,希望对您有用.如果有疑问,可 ...

  9. 中文空格字符与英文空格字符怎么区分_设计随笔 | 中英文字符间距与社交网络脱退...

    前阵子群里的一些同学有注意到,在 iOS 13 系统里,排版引擎会自动在中文汉字与数字或英文字母之间加上一个小于半角空格的空白间距. 在这之前,有很多人在讨论关于中文汉字与英文字母之间是否应该手动添加 ...

最新文章

  1. fcm和firebase_我如何最终使Netlify Functions,Firebase和GraphQL一起工作
  2. Nginx负载均衡和反向代理
  3. 《JAVA与模式》之工厂方法模式
  4. python多维数据划分_【python+机器学习(4)】多维数据的特征选取(RidgeLasso)...
  5. mpi和openmp混合编程的优点_混合云:拥抱云计算的未来!
  6. qq里面cap字符_QQ 幸运字符一共有几种?
  7. 开源一个简单的VC界面库
  8. 2022年11月广东软考系统集成真题及答案解析
  9. 《数字电子技术基础》5.1 触发器概述、5.2 SR锁存器
  10. Giant MIDI Piano 安装教程
  11. 优秀的PPT模板网站
  12. 牛顿?不不不,是牛逼顿
  13. 纯css写滚动的弹幕特效
  14. PS CS6视频剪辑基本技巧(一)CS6可以实现的视频剪辑功能
  15. UE4 将项目压缩成最小的Zip压缩包
  16. 通过替换音效文件,实现在安卓手机上使用wp/nokia/wm10按键键盘声音
  17. Latex编辑IEEE论文入门问题集锦
  18. js逆向之企名片加密参数encrypt_data的破解
  19. linux设置文件权限为可执行
  20. 腾讯微博为何干不过新浪?

热门文章

  1. www.opensymphony.com - Class: java.net.PlainSocketImpl
  2. SSRS 使用(1)建立简单的Report
  3. 国家法定晚婚年龄是多少
  4. [WCF]利用net.tcp傳輸協定來建置WCF Service
  5. MySQL 二进制日志(Binary Log)
  6. 2015 10月21日 工作计划与执行
  7. bash的RANDOM变量生成的是真正的随机数吗
  8. 2013年7月28日web前端学习笔记-------head相关标签应用
  9. 百度Google搜索框中,你不知道的变化
  10. Android ViewStub的应用