【PHP入门到精通】:Ch05:字符串处理
Ch05: 字符串簡介
5.1 字串說明?
字符串是指由>=0個字符構成的一串字符,所以叫字符串。這里所說的字符主要包括以下幾種類型:
數字類型:如1, 2, 3, 4等。
字母類型:如果a, b, c, d等。
特殊字符:如#, $, %, ^, &等。
不可見字符:如\n, \r, \t等。
其中不可見字符是比較特殊的一組字符,它用來控制字符串格式化輸出,在瀏覽器上不可見,只能看到字符串輸出的結果。
不可見字符示例:
echo fruit\rpear\napple\tbanana?
==>?
fruit pear apple banana?
提示:運行結果在瀏覽器上不可見,或者說是非預期結果。需要在IE瀏覽器中選擇"查看"/"源文件"命令來查看字符串的輸出結果
5.2 單引號 與 雙引號?
雙引號中的內容是要經過PHP語法分析器解析,任何變量在雙引號中都會被轉換(替換)成它的值進行輸出顯示;
單引號中的內容是"所見即所得"的,無論有沒有變量,都會被當作普通字符進行原樣輸出。
在進行SQL查詢之前,所有字串都必須加單引號,以避免可能的注入漏洞和SQL錯誤。
注意:
1) 理論上講,單引號要快一些,但是如果需要打印一個變量的值,則必須使用雙引號。
2) 有效的HTML常常包括許多用雙引號括住的屬性,所以當利用PHP打印HTML時,使用單引號最容易。
$name='JACK'?
雙引號調用變量$name: my name is JACK?
單引號調用變量\$name: my name is $name
5.2 字符串連接符?
句點就是字符串連接符,它可以把多個字符串連接成一個字符串。
但句點無法實現大量簡單字串的連接,PHP允許程序員在雙引號中直接包含字串變量。 也就是上一節里面使用過的包含變量的雙引號,兩者呈現效果相同,下面示例是顯示效果(但源碼書寫方式有別)
我的網址: www.shopbao.com?
我的網址: www.shopbao.com
5.3 轉義/還原字串數據:
addslashes(): 在指定的預定義字符前添加"\",用于為存儲在數據庫的字串以及查詢語句準備合適的字串。
stripslashes(): 是addslashes()的反函數,用于還原轉義的字符,也叫反轉義。
以單引號為定界符的php字串,支持2個轉義:\\, \'?
以雙引號為定界符的php字串,支持8個轉義:\\, \", \r, \n, \t, \$, \[0-7]{1,3}, \x[0-9A-Fa-f]{1,2}?
addslashes()支持4個轉義:轉義引號問題:\\, \', \", NULL?
前面2個指出了我們在定義字串時需要注意的特殊字符,后面1個則是某一函數(這里是addslashes)自身所規定的特殊字符, 不要混淆了。
實際上,不論是單引號還是雙引號,包含在里面的雙引號或單引號子串都會被轉義。
為避免引發addslashes()雙層轉義結果出錯,我們建議:
1) 單引號內使用雙引號子串,雙引號內使用單引號子串就OK。
2) 單引號內,編碼"\"和"\\"都會顯示"\",且字串長度都為1。
而在雙引號內,"\"常用來跟后面的3個字符一起來組合8進制或16進制數(或ASCII碼);如果要正常輸出"\",編碼時必須使用"\\";這一特點要注意一下。
3) 帶有轉義字符的字串的長度,要以轉換后的字符長度為準。
轉義字符測試:
單引號之引號測試:
顯示字串='單引號'包含 "雙引號" 子串.?
轉義字串=\'單引號\'包含 \"雙引號\" 子串.?
還原字串='單引號'包含 "雙引號" 子串.?
雙引號之引號測試:
顯示字串="雙引號"包含'單引號'子串.?
轉義字串=\"雙引號\"包含\'單引號\'子串.?
還原字串="雙引號"包含'單引號'子串.?
單引號之反斜杠測試:
顯示字串=1個反斜杠:\; 2個反斜杠:\?
轉義字串=1個反斜杠:\\; 2個反斜杠:\\?
還原字串=1個反斜杠:\; 2個反斜杠:\?
雙引號之反斜杠測試:
顯示字串=1個反斜杠:\; 2個反斜杠:\?
轉義字串=1個反斜杠:\\; 2個反斜杠:\\?
還原字串=1個反斜杠:\; 2個反斜杠:\?
單引號之NULL測試:
顯示字串=\0?
轉義字串=\\0?
還原字串=\0?
雙引號之NULL測試:
顯示字串=?
轉義字串=\0?
還原字串=?
單引號之特殊字符測試:
顯示字串=I 'm Jack, have $\5023 on me, "yeah". @_@:\t_\102?
轉義字串=I \'m Jack, have $\\5023 on me, \"yeah\". @_@:\\t_\\102?
還原字串=I 'm Jack, have $\5023 on me, "yeah". @_@:\t_\102?
雙引號之特殊字符測試:
顯示字串=I'm Jack, have $B3(P23) on me, "yeah". _B?
轉義字串=I\'m Jack, have $B3(P23) on me, \"yeah\". _B?
還原字串=I'm Jack, have $B3(P23) on me, "yeah". _B?
5.4 字符串操作?
string trim(string str [, string charlist]);?
去除字串左右兩邊的空格或指定字串,返回去掉成功后的字串,但不會改變原有字串
string ltrim(string str [, string charlist]);?
去除字串左邊的空格或指定字串,返回去掉成功后的字串,但不會改變原有字串
string rtrim(string str [, string charlist]);?
去除字串右邊的空格或指定字串,返回去掉成功后的字串,但不會改變原有字串
int strlen(string str);?
獲取指定字串str的長度?
string substr(string str, int start, [, int length]);?
截取字串。 int strcmp(string str1, string str2);?
比較字串(以字節方式,大小寫敏感),如果相等返回0,如果前者大返回值>0,如果前者小返回值<0?
int strcasecmp(string str1, string str2);?
比較字串(以字節方式,大小寫不敏感)。 int strnatcmp(string str1, string str2);?
比較字串(以自然排序法方式) int strncmp(string str1, string str2, int len);
比較字串中的前n個字符。
string strstr(string haystack, string needle);?
檢索字串。?
string strchr(string haystack, string needle);?
檢索字串。
int substr_count(string haystack, string needle);?
獲取子串在字串在出現的次數。?
mixed str_replace(mixed search, mixed replace, mixed subject [, int &count]);?
替換字串中的子串。?
string substr_replace(string str, string repl, int start [, int length]);?
替換字串中指定位置處的子串。?
string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]]);?
對數字進行字串格式化。 array explode(string seperator, string str [, int limit]);?
分割字串。?
string implode(string glue, array places);?
合成字串。?
注意:
1) [l|r]trim默認過濾字符包括:\r, \n, \t, \0, \x0B, " "(space),當然你也可以在這個基礎上,在charlist參數中提供要過濾的自定義字符。
2) strlen函數,漢字占2字符,數字、英文、小數點、下劃線和空格占1個字符。
3) substr函數:采用下標截取法,即第1個字符時start定為0;若start<0,從字串末尾倒數第start個字符處開始截取; 若length<0,表示取到倒數第length個字符。
4) substr函數:截取含有中文字符的字串時,如果start為奇數會引起子串亂碼,所以不建議用substr截取中文字串。解決中文子串亂碼的最好辦法是用substr()編寫一個自定義函數。
5) number_format函數:參數個數可以是1、2、4,但不能是3。?
1個參數格式化到小數點,且每一千時以","隔開;
2個參數格式化到小數點后第num_decimal_places位,且每一千以","隔開;?
4個參數格式化到小數點后第num_decimal_places位,用dec_seperator替代".",用thousands_seperator替代千位隔位符(",");?
6) explode函數:
字串分割。?
如果separator為空字串,函數返回false;如果separator在str中找不到,函數返回包含str單個元素的數組。?
如果limit>0,返回數組包含最多limit個元素,而最后的元素將包含string的剩余部分;
如果limit<0,返回除了最后的-limit個元素外的所有元素。?
7) implode函數:是個和explode()相對的函數,一個用于合成,一個用于分隔。
str=1234567890?
substr(str, 1)=234567890
substr(str, 1, 4)=2345
substr(str, -4, 4)=7890
substr(str, 0, -4)=123456
substr(str, -4, 3)=789
substr(str, -4, -3)=7
str1=B10
str2=B2
str3=b2?
strcasecmp(str1, str2)=-1
strnatcasecmp(str1, str2)=1
strcmp(str2, str2)=0
strcmp(str2, str3)=-1
strstr("Hello world!","world")=world!
strstr("Hello world!", "zz")=
?
轉載于:https://www.cnblogs.com/jacklikedogs/p/3481672.html
總結
以上是生活随笔為你收集整理的【PHP入门到精通】:Ch05:字符串处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 和我一起学WCF(6):宿主(Hosti
- 下一篇: [分享] 精神崩溃的老鼠