PHP mbstring通过多字节字符串扩展处理中文查找计算问题

Posted WidgetBox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP mbstring通过多字节字符串扩展处理中文查找计算问题相关的知识,希望对你有一定的参考价值。

最近有个需求有到了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通过多字节字符串扩展处理中文查找计算问题的主要内容,如果未能解决你的问题,请参考以下文章

PHP开发-多字节字符串处理及字符编码

Laravel基本使用

php中截取字符串应当注意啥

PHP 内置函数strlen 和mbstring扩展函数mb_strlen的区别

Composer - 您的系统中缺少请求的 PHP 扩展 mbstring [关闭]

在linux下,为php增加mbstring扩展,求助!