「作者主頁」:士別三日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"