当前位置:首页 > PHP > PHP trim方法遇到的坑

宝塔服务器面板,一键全能部署及管理,送你3188元礼包,点我领取

PHP trim方法遇到的坑

原创 2019-06-11 PHP 2741
分享给朋友:

先上一段代码:

$a = "互联网产品、";
$b = trim($a, "、");
var_dump($b);

你的心里预想会打印什么值呢?

是不是=>"互联网产品"

可现实打印的是

string(14) "互联网产�"

可能到这里有很多人怀疑是不是中文的问题?

那么接着往下看:

$a = "table?type=4";
$b = trim($a, "?type=4");
var_dump($b);

你的心里预想会打印什么值呢?

是不是=>"table"

可现实打印的是

string(3) "abl"

What?Why?

看看PHP官方对trim方法的解释:

trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] ) : string

此函数返回字符串 str 去除首尾空白字符后的结果。如果不指定第二个参数,trim() 将去除这些字符:

" " (ASCII 32 (0x20)),普通空格符。

"\t" (ASCII 9 (0x09)),制表符。

"\n" (ASCII 10 (0x0A)),换行符。

"\r" (ASCII 13 (0x0D)),回车符。

"\0" (ASCII 0 (0x00)),空字节符。

"\x0B" (ASCII 11 (0x0B)),垂直制表符。

好像...看不大懂!!!

简单的说,中文过滤时候,因为字节的原因,“品”字中的部分字节跟“、”的部分字节重复,被过滤掉了,剩下的字节不足以拼接成一个中文,然后就乱码了。

、 由0xe3 0x80 0x81三字节组成,
品 由0xe5 0x93 0x81三字节组成。

同理,英文中的部分字节相同也被过滤了?【英文是我个人的怀疑...】

建议:

项目中尽量少用trim、ltrim、rtrim方法来获取最终值

提倡使用正则匹配或者数组切割explode方法来获取想要的值


声明:版权所有,违者必究 | 如未注明,均为原创 | 本网站采用 BY-NC-SA 协议进行授权

转载:转载请注明原文链接,违者必究 - :https://www.wolfcode.net/info/145/

分享给朋友:

相关文章

EasyAdmin8 - PHP8.0常用框架快速后台管理系统

EasyAdmin8 开源快速开发后台,ThinKPHP 、 Laravel、webman 均覆盖

webman-blog 基于 webman 开源博客程序

webman-blog,一个基于 webman 的简单自适应个人博客程序,带后台。

webman自定义进程

1、新建文件 process/Rpc.php 编写rpc进程<?php namespace process; use Workerman\Connection\TcpConnection; class Rpc {    &n

在PHP7+下监控Memcached服务、性能、扇区等信息

PHPMemcachedAdmin:一款网页可视化的Memcached工具

Swoole的PHP协程开发框架 imi 集成ThinkPHP模板引擎 think-template

在 imi 框架根目录中执行composer require topthink/think-template安装好模板引擎后,找到路径\vendor\topthink\think-template\src\Template.php找到 fetch() 渲染模板文件的方法,将最后一

PHP7下MongoDB自增或自减一个字段的值

findAndModify属于原子操作模型数据,所谓原子操作就是要么这个文档保存到Mongodb,要么没有保存到Mongodb,不会出现查询到的文档没有保存完整的情况。

PHP的面向对象解析

早期编程由于受电脑硬件限制,程序都是追求效率,而忽略可理解性,扩充性,随着硬件技术的发展,编程越来越重视多人开发,程序员越来越重视程序的可靠性,可扩展性,可维护性,所以刺激了程序语言的发展

ThinkPHP6.0使用EasyTask常驻内存多进程任务管理

PHP常驻内存的多进程任务管理器Composer包。以进程管理为出发点,同时也支持为每个进程设置定时执行功能,您可以用它来完成需要重复运行的任务(如订单超时自动取消,短信邮件异步推送,队列/消费者/频道订阅者等等),甚至处理计划任务。

PHP8新特性盘点

PHP 8.0.0 已经正式发布了,这个对于PHPer无疑是一个令人振奋的消息。它包含了很多新功能与优化项, 包括命名参数、联合类型、注解、构造器属性提升、match表达式、nullsafe运算符、JIT,并改进了类型系统、错误处理、语法一致性。

PHP8新特性系列:构造器属性提升使用及注意事项

本篇主要说下PHP8构造器属性提升的用法,这个特性对于一些需要在构造器中设置或初始化一些类属性的时候非常有用(包括public、protected和private),比如在PHP7中你可以这样定义一个类的属性,然后在构造方法中传值。class Point {  &nb