PHP substr()函数详解,PHP截取字符串。
「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》
substr
substr() 可以「截取」字符串。
语法
string substr( $str, start, length);
参数
- $str :被截取的字符串。
- start :开始截取的位置。
- length :截取的长度。
返回值
- 截取成功,就返回截取的字符串
- start 超过字符串长度,就返回 false
- start 和 length 设置成不合理的截取范围,就返回空字符串
一、截取字符串
1)字符串的「索引」从0开始,「空格」也算一个字符。
实例1:从左边第6个字符开始,往右截取4个字符。
echo substr('0123456789',6,4).PHP_EOL;echo substr('01234 6789',6,4);
输出:
67896789
2) start 和 length 可以为负数,负数就是相反的意思。
实例2:从右边第6个字符开始,往右截取4个字符。
echo substr('9876543210',-6,4);
输出:
5432
实例3:从左边第6个字符开始,截取到右边第3个字符。
echo substr('0123456789321',6,-3);
输出:
67893
实例4:从右边第6个字符开始,截取到右边第4个字符。
echo substr('9876543210',-6,-4);
输出:
54
二、截取中文字符串
「英文」字符占1个字节,UTF8编码的「中文」占3个字节,GB2321编码的中文占2个字节。
截取中文时,一个(UTF8编码)中文要当做3个字符串来截取, start 和 length 的值得是「3的倍数」,否则会截取到乱码。
实例:
echo substr('零一二三四五六七八九',0,3).PHP_EOL;echo substr('零一二三四五六七八九',3,3).PHP_EOL;echo substr('零一二三四五六七八九',3,1);
输出:
零一�
三、length的特殊值
1) length 可以省略,默认截取到字符串「末尾」。
实例:
echo substr('0123',1).PHP_EOL;echo substr('0123',-1);
输出:
1233
2) length 为 0,null,false 时,表示截取 0 个字符, substr() 会返回空字符串。
实例:
var_dump(substr('0123',1,0));var_dump(substr('0123',1,null));var_dump(substr('0123',1,false));
输出:
string(0) ""string(0) ""string(0) ""
四、start的特殊值
1) start 超过字符串「长度」时,会返回false。
实例:
var_dump(substr('0123',11));
输出:
bool(false)
2) start 可以是数值型字符串,但内容必须是「纯数字」,否则会报错。
实例:
var_dump(substr('0123','0'));
输出:
string(4) "0123"
3) start 可以是「布尔类型」( true=1;false=0 )。
实例:
var_dump(substr('0123',true));var_dump(substr('0123',false));
输出:
string(3) "123"string(4) "0123"
4) start 包含运算符时,会先「运算」,再将运算结果「赋值」给 start 。
实例:
var_dump(substr('0123',1+1));var_dump(substr('0123',1*2));var_dump(substr('0123',~~2));var_dump(substr('0123',1&1));
输出:
string(2) "23"string(2) "23"string(2) "23"string(3) "123"
5) start 为十六进制时,会自动转换为0进制。
实例:11的十六进制是 0xB
var_dump(substr('0123456789abcde',0xB));
输出:
string(4) "bcde"
来源地址:https://blog.csdn.net/wangyuxiang946/article/details/131175875
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341