php函数substr、strlen计算中文字节数不准确的问题

PHP与SEO 思享 196浏览

使用场景:post提交数据,对数据的字节长度有限制,为了避免字符串过长而导致post失败,需要使用strlen函数获取字符串字节数,然后通过判断,使用substr截取字符串确保长度在限制内。然而在使用过程中,发现依旧存在post失败的情况

问题原因

因为编码问题,strlen获取的字符串字节数会存在差异,因此导致strlen没超过的字符串,post却返回字节过长。

如下摘自网络文章

关于中文的问题,PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在UTF-8编码下,一个汉字占3个字节)。

问题解决

mb_strlen() 函数可以指定字符编码,用此函数替代获取字符串字节数函数strlen()

同理,使用mb_substr() 函数代替substr() 进行字符串截取

注意:如mb_strlen() 报错需设置php.ini开启

推荐阅读

百度自动推送php实现代码

我们知道主动推送有助于搜索引擎抓取和收录网站内容,wordpress或者主流CMS其实已经集成了推送功能。但是如果我们要定期归还,而不是只在发布的时候推一次。这个功能可以通过结合PHP和Pagoda Panel的预定任务来实现。$api = '百度站......

PHP报错Warning:file_get_contents():SSL operation failed with code 1

今天用在线界面验证百度真假蜘蛛,发现报道有误。错误提示显示SSL操作失败,代码为1。我在网上找到了解决方案,分享给大家参考。警告:file_get_contents():无法在/xxx/xxx.php的第31行启用加密。ip=220.181.108.......

PHP空间绑定多个域名搭建不同单页站点

这些限制只有一个根目录。如果你想建立不同的网站,你只能把二级目录。但如果是单页,可以用php绑定多个域名,让域名跳转到不同的单页,实现批量建站。如果使用表头跳转,URL也会跳转,而且require类似于导入模板,不会跳转。...