「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》
substr
- 一、截取字符串
- 二、截取中文字符串
- 三、length的特殊值
- 四、start的特殊值
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);
输出:
6789
6789
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);
输出:
123
3
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"