PHP:解决 mb_strimwidth 乱码问题 / mb_internal_encoding 的相关配置

近日在做一个系统迁移项目的时候发现一处乱码,发现乱码的产生不在于文件或者数据库的编码,而在于一个 mb_strimwidth 函数将一串中文字符串错误地截断了,导致尾部产生局部乱码。

mb_strimwidth($row['subj'],0,28,'…');

如上,由于截断是按照 28 截断的,本意应当是按照 28 个 unicode 字符进行截断,但是实际按照了 28 个字节去截断,因此产生了问题。

于是查找文档:

http://php.net/manual/zh/function.mb-strimwidth.php

发现通过 mb_internal_encoding 函数可以配置实际使用的编码。

// 在所有代码前面加上
mb_internal_encoding('utf8');

参考:http://php.net/manual/zh/function.mb-internal-encoding.php

但是,应该存在不修改程序代码的解决办法,于是继续深挖影响这个配置的 php.ini 配置:

这是通过配置文件修改这个默认编码的文档:

实际上在 php 里面的有效配置是这一句:

mbstring.internal_encoding = UTF-8

http://php.net/manual/en/mbstring.configuration.php

另外可以参照这篇文档:http://stackoverflow.com/q/13663202/2544762


【转载请附】愿以此功德,回向 >>

原文链接:https://www.huangwenchao.com.cn/2015/12/php-mb-encoding-setting.html【PHP:解决 mb_strimwidth 乱码问题 / mb_internal_encoding 的相关配置】

发表评论

电子邮件地址不会被公开。 必填项已用*标注