最近有个需求有到了mbstring相关的函数进行中文处理,如下:

  • mb_strpos
  • mb_strlen

过程中遇到一点比较奇怪的问题,及在本地环境运行没有问题

但我们生产环境是2台服务器,其中一台正确,另外一台返回的数值不正确

表现为一个中文按照3个字节进行了计算,本意应该为1个

网上找了半天说需要转换,如以下文章:https://www.awaimai.com/2605.html   实则没有半点效果

最后google上查找资料,排查服务器发现,服务器一台为PHP5.4,一台为PHP5.6

于是在本地切换至5.4发现有同样的问题。

PHP文档说明中,字符集从5.4开始默认为UTF-8,但实际用于中发现,用于Mbstring相关函数的时候字符集为:ISO-8859-1

联想可能是由此导致,最后解决方案如下:

1.修改 php.ini 中的 mbstring.internal_encoding 参数为 UTF-8,并重启服务

2.在编码时,采用 mb_internal_encoding("UTF-8"); 设置字符集

以上两种方法皆可

参考资料

https://www.php.net/manual/zh/mbstring.configuration.php#ini.mbstring.internal-encoding

https://betakuang.me/php-the-right-way/

作者:旧旧的 <393210556@qq.com> 解决问题的方式,就是解决它一次

PHP mbstring通过多字节字符串扩展处理中文查找、计算问题的更多相关文章

  1. 简单入门PHP中的多字节字符串操作

    什么是多字节的字符串操作呢?其实不少的同学可能都已经使用过了,但我们还是要从最基础的问题说起. 一个字符占几个字节并不是我们表面上看到的那样.正常情况下,一个数字或英文以及英文符号都是占用一个字节的. ...

  2. UNICODE字符串与多字节字符串的转换

    相互转换的两个函数的声明: 1. 多字节字符串与宽字符串的转换 int MultiByteToWideChar( UINT CodePage, // code page,一般设为 CP_ACP DWO ...

  3. PHP 多字节字符串 函数

    参考资料 多字节字符编码方案和他们相关的问题相当复杂,超越了本文档的范围. 关于这些话题的更多信息请参考以下 URL 和其他资源. Unicode materials » http://www.uni ...

  4. C# 删除字符串中的中文

    /// <summary> /// 删除字符串中的中文 /// </summary> public static string Delete中文(string str) { s ...

  5. 使用Java判断字符串中的中文字符数量

    Java判断一个字符串str中中文的个数,经过总结,有以下几种方法(全部经过验证),可根据其原理判断在何种情况下使用哪个方法: 1. char[] c = str.toCharArray(); for ...

  6. es3中使用es6/7的字符串扩展

    最近在看阮一峰的<ES6标准入门>,在字符串扩展一节中有提到几个新的扩展,觉得挺有意思,想在ES3里面使用,于是就有下面的兼容性写法. repeat 将一个字符串重复n次 String.p ...

  7. ES6字符串扩展

    前面的话 字符串是编程中重要的数据类型,只有熟练掌握字符串操作才能更高效地开发程序.JS字符串的特性总是落后于其它语言,例如,直到 ES5 中字符串才获得了 trim() 方法.而 ES6 则继续添加 ...

  8. ES6中字符串扩展

    ES6中字符串扩展 ① for...of 遍历字符串: 例如: for(let codePoint of 'string'){ console.log(codePoint) } 运行结果: ②  in ...

  9. es6基础(4)--字符串扩展

    //字符串扩展 { console.log('a','\u0061'); console.log('s','\u20BB7');//超过了0xffff console.log('s','\u{20BB ...

随机推荐

  1. 38、数据源Parquet之使用编程方式加载数据

    一.概述 Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目,最新的版本是1.8.0. 列式存 ...

  2. CF1207题解

    D 全排列减去坏序列 坏序列分三种,容斥一下就好了 E 比较有意思 \(A=_{i=1}^{100}\{i\},B=_{i=1}^{100}\{i\cdot 2^7\}\),所以\(A_i~xor~ ...

  3. [HackTheBox]WEB题目

    0x01 [50 Points] I know Mag1k 问题描述: Can you get to the profile page of the admin? 访问分配的地址,是一个带注册的登入页 ...

  4. 数组不能用for each ,

    数组不能用for each 不能用这 for(String xkz:xkzzj){ SjshdcDTO sjshdcDTO = cpcyService.findSjshdcDTOById(xkz); ...

  5. html中a标签的常见用法

    html中a标签的常见用法 一.总结 一句话总结: a.页面跳转 b.使用锚点定位 c.下载文件 二.html中<a>标签的用法 转自或参考:html中<a>标签的用法http ...

  6. Oracle查看当前用户所在的表空间

    1.用户 查看当前用户的缺省表空间 select username,default_tablespace from user_users; 1 查看当前用户的角色 select * from user ...

  7. mysql排序字段为空的排在最后面

    排序字段为orderid; 1.使用order by orderid desc实现降序时,orderid 为null数据的会排在数据的最后面: 但是,order by orderid升序时,order ...

  8. NTC3950-10K温度传感器

    一.计算公式 补充: B=3950 R=10K T2=25度 查RT表,25度对应的是10K 电路: 热敏电阻与上拉电阻R813分压,获取温度与Vo电压的关系,在根据Vo折算出与MCU ADC的数值. ...

  9. 在Eclipse IDE进行Struts开发时提示错误:java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.FilterDispatcher的解决办法

    If you have... included all necessary jars Configured build path correctly added them all in deploym ...

  10. Vue 使用axios分片上传

    Vue的界面 <input type="file"/> 上传方法 fileUpload: function () { var num = 1 var file = do ...