自定义函数实现mb_strlen与中文 strrev转置功能
来源:互联网 发布:服务器端口转发工具 编辑:程序博客网 时间:2024/05/22 00:34
mb_strlen 功能:获取字符串长度,主要是指非ascii编码的字符串。
代码:
<?php$str = '北京1你好abc';function my_strlen($str) { $i = 0; $count = 0; $len = strlen($str); while ($i < $len) { $chr = ord($str[$i]); $i++; $count++; if ($chr & 0x80) { $chr <<= 1; //此处使用的原理为utf-8格式编码决定的。 //当字节的第一位为0 则表示该字符为单字节文字,即ascii, 后面有多少个1就表示字符占用多少个字节。。 while ($chr & 0x80) { $i++; $chr <<= 1; } echo '$i = ' . $i, "\n"; } } return $count;}
主要实现原理采用的是utf-8格式编码的规则。
如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。
另外还可以使用正则表达式的方式实现。
<?php$str = '北京1你好abc';function my_strlen($str) { return count(preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY));}echo my_strlen($str), "\n";
strrev 功能:反转字符串
当使用strrev时,如果是英文字符反转功能正常 ,而中文字符会出现乱码。 而mb库中并没有相应的处理方式。
我们需要手动实现一个,
方法1, 使用正则表达式,分割字符串 进行转置。
$arr = preg_split('//u', $str);$arr = array_reverse($arr);$str = join('', $arr);
方法2. 使用上一个原则的特点 自定义函数
function mb_strrev($str){ $length = strlen($str); $returnStr = []; for ($i = 0; $i < $length; $i++) { $chr = ord($str[$i]); if ($chr & 0x80) { $chr <<=1; $j = 0; while ($chr & 0x80) { $j++; $i++; $chr <<= 1; } for ($k = 0; $k <= $j; $k++) { array_unshift($returnStr, $str[$i - $k]); } } else { array_unshift($returnStr, $str[$i]); } } return join('', $returnStr); }
阅读全文
0 0
- 自定义函数实现mb_strlen与中文 strrev转置功能
- 实现strrev()函数
- strrev函数
- strrev函数
- strrev函数
- strrev函数
- 自己实现函数itoa()和strrev()
- strlen与mb_strlen字符串长度函数
- php函数strrev()反转中文字符串乱码的问题
- 获取中文字符串长度strlen 与 mb_strlen 区别
- 写一个函数替代strrev()--实现字符串翻转
- 自定义函数分块实现功能
- 字符串函数strrev
- 字符串函数strrev
- PHP strrev() 函数
- strrev。。反转字符串函数
- C语言strrev函数
- strrev 函数原代码
- Insights2.1配置访问Oracle数据库表
- linux查看系统编码和修改系统编码
- java base64编码和解码
- c++ vector(向量)使用方法详解
- C#对XML文件的各种操作实现方法
- 自定义函数实现mb_strlen与中文 strrev转置功能
- 汇编语言学习笔记2(王爽)
- 又双叕写了一个 Host 管理插件
- 使用数据库的方式来自定义存储用户session信息
- 工厂模式
- AndroidManifest.xml清单文件详解--manifest节点
- 计算并输出下列的值
- VTK序列图像的读取
- Io