在项目的开发中,常常遇到要计算一个字符串的长度(中英文结合),由于产品要求不同,每个中文的长度要求也不一样。

解决utf-8编码下的字符串长度(可自定义每个中英文算几个字节)

/**
* 计算字符串长度
* @author Timothy
* @param null $string 要计算的字符串,默认null
* @param int $chinese 中文占几个字节,默认2
* @param int $other 其他字符算几个字节,默认1
* @return int 返回的长度
*/
private function utf8_strlen($string = null, $chinese = 2, $other = 1) {
// 将字符串分解为单元
preg_match_all("/./us", $string, $match);
$pattern = '/[^\x00-\x80]/';
$count = 0;
foreach ($match[0] as $key => $value) {
$count = preg_match($pattern, $value) ? ($count + $chinese) : ($count + $other);
} return $count;
}
注:
1、preg_match_all("/./us", $string, $match);//"/./us",u表示默认为utf-8编码,s (PCRE_DOTALL)表示
如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。
2、$pattern = '/[^\x00-\x80]/';//表示匹配中文

php 计算字符串长度的更多相关文章

  1. [转载] python 计算字符串长度

    本文转载自: http://www.sharejs.com/codes/python/4843 python 计算字符串长度,一个中文算两个字符,先转换成utf8,然后通过计算utf8的长度和len函 ...

  2. php计算字符串长度:utf8编码,包含中文

    php计算字符串长度:utf8编码 中文当作1个字符处理(strlen默认当作两个字符) 上函数: /** * 计算 UTF-8 字符串长度 * * @param string $str * @ret ...

  3. ios 计算字符串长度<转>

    - (int)textLength:(NSString *)text//计算字符串长度 {     float number = 0.0;     for (int index = 0; index ...

  4. C#计算字符串长度,汉字算两个字符

    在C#中的字符串类String中,有个Length属性表示字符串的长度,但该字段返回的是字符的个数,如果字符串中含有中文字符的话,一个汉字占用两个字符的长度,此时获取的长度就不够精确,当然也看具体业务 ...

  5. javascript计算字符串长度

    javascript计算字符串长度 学习了:https://blog.csdn.net/u012934325/article/details/75214847 function getByteLen( ...

  6. NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用

    NET MVC全局异常处理(一)   目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关 ...

  7. JS计算字符串长度(兼容后端PHP)

    /*** 计算字符串长度* 参数是要计算的字符串* 返回值当前字符串的长度*/function charactersLen (words) { let tempMapWordNum = {} let ...

  8. PHP计算字符串长度,PHP如何计算短信的长度/字数?

    PHP计算字符串长度,包括计算英文.GBK.UTF-8多种字符集下PHP如何计算字符串长度. 英文字符串长度,strlen()是PHP自带的计算英文字符串的函数. GBK字符串长度 中文字符计算为2个 ...

  9. PHP计算字符串长度函数

    //计算字符串长度 function strlen_utf8($str) { $i = 0; $count = 0; $len = strlen ($str); while ($i < $len ...

随机推荐

  1. scales小谈grunt

    Grunt是基于Node.js的项目构建工具.它可以自动运行你所设定的任务.Grunt拥有数量庞大的插件,几乎任何你所要做的事情都可以用Grunt实现. 一头野猪映入眼帘,意:咕噜声 中文网站:htt ...

  2. 【BZOJ-2177】曼哈顿最小生成树 Kruskal + 树状数组

    2177: 曼哈顿最小生成树 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 190  Solved: 77[Submit][Status][Discu ...

  3. 【bzoj1086】 scoi2005—王室联邦

    http://www.lydsy.com/JudgeOnline/problem.php?id=1086 (题目链接) 题意 求将树分为几个联通块,每个联通块大小大于B小于3B,是否可行. Solut ...

  4. 洛谷P2242 公路维修问题(Road)

    题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜. 有些牛棚里有牛 ...

  5. Objective-C 谈谈深浅拷贝,copy和mutable copy都不是完全拷贝

    (一)字符串中的指针赋值,copy和mutablecopy NSString和NSString (1)指针赋值 肯定指向同一个字符串地址. (2)copy(和直接指向一样) NSString *str ...

  6. 爬虫例子及知识点(scrapy知识点)

    新知识: 新建一个scrapy项目:scrapy startproject xxx(项目名称) 运行一个scrapy项目:scrapy crawl xxx(项目名称) 项目文件说明: 文件说明: • ...

  7. primefaces p:tableData 显示 List<List>

    @javax.faces.bean.ViewScoped public class Controlador { private List<List> estadistico; @PostC ...

  8. uC/OS-II全局变量定义

    /*************************************************************************************************** ...

  9. WinForm------SplitContainerControl的窗体调用控件方法

    Frm_Books窗体(窗体里面有个按钮跳转Frm_Book_Select窗体) private void Add_Book_ItemClick(object sender, DevExpress.X ...

  10. 《Struts2.x权威指南》学习笔记2

    在学习了第二章后,我想要将struts分类,修改一下struts.xml的默认读取路径如下图. 在IntelliJ中,resources是struts的默认路径 修改路径,需要在web.xml中添加s ...