今天在遇到了一个中英字符串截取的问题,在gbk里中文里每个字占两字节,如果全是中文的话,用substr()函数就可以实现了,但中英都有的话就麻烦了,在以前收藏的代码里找到了一个不错的函数,很好的实现了截取的功能:

function get_word($string, $length, $dot = '..',$charset='gbk') {

if(strlen($string) <= $length) {

return $string;

}

$string = str_replace(array(' ',' ', '&', '"', ''), array('','','&', '"', ''), $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];

}

}

return $strcut.$dot;

}

$str = "欢迎 visit 简明 nowamagic";

$str_result = get_word($str, 12);

echo $str_result;

测试运行结果:

欢迎 visit..

php 字符串中英文混合截取,PHP截取中英混合的字符串相关推荐

  1. python中英文字符和中文字符存储长度不同_Django如何正确截取中英混合字符串及表单中限制中文字符中长度...

    中文字符和英文字符所占的字节长度是不一样,一个是2个字节,一个是1个字节,这给我们用英文的web框架开发中文app带来了麻烦.比如Django自带过滤器truncatewords并不支持截取中文,另外 ...

  2. java中英文汉语混合排序_Java编程实现中英混合字符串数组按首字母排序的方法...

    本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法.分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷 ...

  3. java中英文混合排序_Java编程实现中英混合字符串数组按首字母排序的方法

    本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法.分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷 ...

  4. (笔记)C++对于中英混合字符串的处理

    由于英文字符每个占一字节,汉字则一个占两字节,C++的string对于中文字符的处理一直是 差强人意,尤其是针对汉英混合的字符串进行截取,更容易出现乱码的现象,因此我们可以使用wstring(宽字符) ...

  5. 计算中英混合字符串的自己字节长度

    1 //#region 获取中英混合字符串的字节长度 2 String.prototype.getBytes = function () { 3 var cArr = this.match(/[^\x ...

  6. 判断传入的句子是中文还是英文还是中英混合并分割的函数

    public function explode_sens($arr){$type=$this->judge_eg_zh($arr);if($type==1){//判断类型,是英文还是中文还是中英 ...

  7. RealMedia Analyzer (rma)中英混合版用户手册

    以前遇到有广告的电影文件都是用一个空的events.txt替代掉rm文件里的url事件,以达到删除电影文件弹出广告的目的. 再或者就是 删除Program Files/Real/RealPlayer/ ...

  8. 拉勾教育 重学数据结构与算法 08 | 字符串:如何正确回答面试中高频考察的字符串匹配算法?

    学习资源:拉勾教育 字符串是什么 字符串是由n个字符组成的一个有序整体(n>=0) 一些特殊的字符串: 空串:指还有零个字符的字符串 空格串:只包含空格的字符串 子串:串中任意连续字符组成的字符 ...

  9. java英文字母排序_Java编程实现中英混合字符串数组按首字母排序的方法

    在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序.例如: 输出的结果为:"gyu  sdf  zf  大同  的人  地方  反对 ...

最新文章

  1. shaderlab学习一
  2. 聊聊微服务的服务注册与发现
  3. HTTP 和 HTTP API 设计
  4. 【OpenCV 例程200篇】28. 图像的旋转(直角旋转)
  5. WiFi---AP+STA共存模式(ESP8266)
  6. Effective c++读书笔记
  7. 超市收银机属于通用计算机,我是一名刚入超市做收银的,我录入货品后微信收钱之后没有在超市电脑上按确定导入账目导致超市系统上多出来钱这改正过来会很难吗?...
  8. TFLearn的简单实例
  9. oracle中循环读出一个表的信息插入到另外一个表中
  10. Script:列出Oracle每小时的redo重做日志产生量
  11. 在Windows服务器上启用远程桌面连接
  12. 用计算机怎么弹星辰大海,【计算机学院】你们的征途将是星辰大海~
  13. 教你 用c语言输出乘法口诀表 一giao我嘞gaiogiao
  14. 软件开发程序员的“九阳神功”——设计模式
  15. 中南大学计算机复试分数线,2019年中南大学考研复试分数线
  16. java bean 首字母大写_javaBean命名规范 get / set 后的首字母大写
  17. Android地图定位-百度地图上定位自己所在的位置
  18. C# 图形处理-缩略图,图片合并,图片写文字,图片调整
  19. 如何将RTOS系统启动时间做到“毫秒级”?AliOS Things是这样做的
  20. Apache Pivot教程 -- Calendars

热门文章

  1. 邓迪大学信息无障碍相关项目概要
  2. 网件4300_如何重命名Netgear Arlo相机
  3. Steven Pu:Taraxa化零为整,放大零散数据真正价值!
  4. 浏览器的云加速可能导致IP统计异常
  5. Paxos协议学习——译《The Part-Time Parliament》
  6. C++题解:【NOIP2006PJ】Jam的计数法(count)
  7. 模型驱动架构(MDA,Model Driven Architecture)浅述
  8. Python之520爱的表白
  9. python学习教程2
  10. 【计算机网络学习笔记】(汇总目录)