function utf8_substr( $str , $start , $length=null ){

// 先正常截取一遍.

$res = substr( $str , $start , $length );

$strlen = strlen( $str );

/* 接着判断头尾各6字节是否完整(不残缺) */

// 如果参数start是正数

if ( $start >= 0 ){

// 往前再截取大约6字节

$next_start = $start + $length; // 初始位置

$next_len = $next_start + 6 <= $strlen ? 6 : $strlen - $next_start;

$next_segm = substr( $str , $next_start , $next_len );

// 如果第1字节就不是 完整字符的首字节, 再往后截取大约6字节

$prev_start = $start - 6 > 0 ? $start - 6 : 0;

$prev_segm = substr( $str , $prev_start , $start - $prev_start );

}

// start是负数

else{

// 往前再截取大约6字节

$next_start = $strlen + $start + $length; // 初始位置

$next_len = $next_start + 6 <= $strlen ? 6 : $strlen - $next_start;

$next_segm = substr( $str , $next_start , $next_len );

// 如果第1字节就不是 完整字符的首字节, 再往后截取大约6字节.

$start = $strlen + $start;

$prev_start = $start - 6 > 0 ? $start - 6 : 0;

$prev_segm = substr( $str , $prev_start , $start - $prev_start );

}

// 判断前6字节是否符合utf8规则

if ( preg_match( '@^([x80-xBF]{0,5})[xC0-xFD]?@' , $next_segm , $bytes ) ){

if ( !empty( $bytes[1] ) ){

$bytes = $bytes[1];

$res .= $bytes;

}

}

// 判断后6字节是否符合utf8规则

$ord0 = ord( $res[0] );

if ( 128 <= $ord0 && 191 >= $ord0 ){

// 往后截取 , 并加在res的前面.

if ( preg_match( '@[xC0-xFD][x80-xBF]{0,5}$@' , $prev_segm , $bytes ) ){

if ( !empty( $bytes[0] ) ){

$bytes = $bytes[0];

$res = $bytes . $res;

}

}

}

return $res;

}

php中英文截取字符串长度,PHP截取字符串长度(中英文混合字符串)_PHP教程相关推荐

  1. php判断字符串里有英文,PHP针对中英文混合字符串长度判断及截取方法示例

    本文实例讲述了PHP针对中英文混合字符串长度判断及截取方法.分享给大家供大家参考,具体如下: /** * * 中英混合字符串长度判断 * @param unknown_type $str * @par ...

  2. js通过字节长度截取中英文混合字符串

    /*** 截取字符串 中英文混合* @param str 待处理字符串* @param len 截取字节长度 中文2字节 英文1字节*/ function subString1(str, len){v ...

  3. ASP如何计算中英文混合字符串长度和截取字符串

    用ASP做网站的时候经常会碰到要截取字符串的情况.ASP中的Len函数不管是中文字符,还是英文字符,统统按一个单位来计算,由于一个中文字符的宽度是一个英文字符宽度的两倍,在中英文混合的情况下字符串实际 ...

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

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

  5. Lua截取utf-8编码的中英文混合字符串

    参考博客:UTF8字符串在lua的截取和字数统计[转载] 需求 按字面个数来截取子字符串 函数(字符串, 开始位置, 截取长度)utf8sub("你好1世界哈哈",2,5) = 好 ...

  6. java html 字符串截取字符串长度_Java截取带html标签的字符串,再把标签补全(保证页面显示效果)...

    一般是用在字符串中有html标签的截取. 如: 后台发布用了在线编辑器, 前台显示内容要截取的情况. import Java.util.ArrayList; import java.util.List ...

  7. Java截取字符串的指定字节数长度

    由于Java字符串的length计算的是字符长度,而数据库的限制长度是字节数,为了防止报错,可以在Java程序中截取字符串的指定字节数长度 public static String getLenStr ...

  8. php截取英语,php 截取中英文混合字符串的方法

    php 截取中应为字符串,就不必再用substr或者mb_substr //截取想这样的字符串 a李三 利用ASCII /** * * 中英混合的字符串截取 * @param unknown_type ...

  9. PHP截取中英文混合字符串

    <?php /*** 截取中英文混合字符串* @param $sourcestr 需要截取的字符串* @param $start 开始位置,字符位置,* @param $cutlength 结束 ...

  10. C#实现 获取指定字节长度 中英文混合字符串 的方法

    平时在作数据库插入操作时,如果用 INSERT 语句向一个varchar型字段插入内容时,有时会因为插入的内容长度超出规定的长度而报错.尤其是插入中英文混合字符串时,SQL Server中一般中文要占 ...

最新文章

  1. 前端学PHP之正则表达式基础语法
  2. 运行程序报“应用程序配置不正确”或者缺少运行库造成程序不可移植的问题...
  3. Linux 上与系统负载有关的命令
  4. 热泵精馏_精馏干货16 || 分子蒸馏
  5. cuda linux编译器_CUDA与Linux系统
  6. python跳回循环开始位置_如何回到python中循环的开始?
  7. 100多本python书,免费电子版下载
  8. Django之静态文件配置
  9. excel公式不自动计算_【纯干货】值得收藏的Excel日期计算公式!
  10. matlab实现photoshop,photoshop图像滤镜——素描算法(含matlab代码)
  11. c语言学习-输出9*9乘法口诀表
  12. 【中级05】Java泛型、反射
  13. JustForFly struts2标签s:generator
  14. 使用redis解决tomcat6在nginx负载下多节点共享session问题
  15. SH7218T拆解手记(7)Clockworkmod recovery的编译
  16. Unity3D 场景切换
  17. 大数据毕设 - 深度学习植物识别系统(python OpenCV)
  18. Tcp连接时三次握手的问题和思考
  19. python应用——将raw文件转化为jpg文件,并显示图像
  20. 富爸爸与穷爸爸读书笔记

热门文章

  1. 超级签名源码_苹果iOS超级签名源码技术解析
  2. mysql 怎么登陆远程服务器_教你手机怎么远程连接云服务器
  3. CMake 中的 PUBLIC,PRIVATE,INTERFACE
  4. C/Cpp / C++ 构造函数和析构函数可以是虚函数吗
  5. python / 解决 pyinstaller 打包后运行时提示找不到模块的问题
  6. 小明分享:8ms平台入门教程
  7. 发福利了|最近发现深圳有一家公司提供的叫8ms的GUI平台不错,好用,最主要所有功能都是免费的
  8. Tomcat下使用war包发布项目
  9. Snort里如何将读取的包记录存到指定的目录下(图文详解)
  10. Java多线程之synchronized(二)