• 技术文章 >后端开发 >PHP问题

    如何解决PHP+trim乱码问题

    藏色散人藏色散人2021-12-14 10:41:55原创332

    PHP trim乱码是因为在PHP中字符串函数默认都不是multibyte-safe的,其解决办法就是封装一个mb_trim函数来解决乱码即可。

    本文操作环境:Windows7系统,PHP7.4版,Dell G3电脑。

    如何解决PHP+trim乱码问题?

    PHP的Trim截取乱码

    一直使用Trim过滤首尾两端的字符串,关于Trim的官方描述:

    trim — 去除字符串首尾处的空白字符(或者其他字符)

    今天发现一个很奇怪的问题, 代码如下:

    <?php
    $str = '研发、产品、';
    echo trim($str, '、');

    猜下这个会返回什么?“研发、产品”?NO,这个居然很奇怪的返回了“研发、产��”。

    难道是我的打开方式不对,怎么会返回乱码呢。

    经过一番测试,发现一个很有趣的问题。

    <?php
    echo trim('abacabb', 'ab');   //print 'c'

    原本以为这个会返回acabb的,但是居然只返回了c。这就是对trim函数的误解了。

    其实这个在官方说明文档的Example是有的,只是我没注意看而已。

    trim会循环去掉字符串首位存在的字符。如上面的例子,则执行过程如下:

    字符串abacabb会从下标0开始循环,如果存在ab中的字符就去掉,一直到没有就停止循环。

    所以执行为:

    但是trim是过滤首尾字符,所以还会从末尾循环去掉。

    所以整个结束后,abacabb就剩下了c了。看到这里对trim函数有所了解了吧。

    好了,说回乱码的问题,为什么会出现返回乱码的情况呢。

    这是因为在PHP中,字符串函数默认都不是 multibyte-safe 的。如果需要 multibyte-safe 则需要使用mb_系列的函数。

    “、”的十六进制码为0xe3 0x80 0x81,对于不是 multibyte-safe 的函数会把它当做三个字符。

    而“品”的十六进制码为0xe5 0x93 0x81。这里最后一个0x81刚好符合了,被过滤了。所以才会导致出现乱码的情况。

    ok,问题找到了,trim没有mb函数,但是我们可以自己封装一个。Function mb_trim

    PS:用了trim好久了,但是一直没有真正了解。看官方文档还是很重要的。

    推荐学习:《PHP视频教程

    以上就是如何解决PHP+trim乱码问题的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:trim PHP
    上一篇:mt_rand是php几开始有的函数 下一篇:php与c++不同之处有哪些
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• php trim 不起作用怎么办• 如何解决php trim 乱码问题• 详解PHP中的trim()函数• php rtrim()怎么去掉一个字符
    1/1

    PHP中文网