由于PHP是弱語言類型,所以當(dāng)使用字符串操作函數(shù)是,其他類型的數(shù)據(jù)也會被當(dāng)作字符串來處理。
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比中寧網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式中寧網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋中寧地區(qū)。費用合理售后完善,10多年實體公司更值得信賴。
一、字符串定義與顯示
字符串通過單引號、雙引號來標(biāo)志,前者將單引號內(nèi)所有的字符都當(dāng)作字符來處理,后者則不是。
字符串的顯示可以使用echo()和print()函數(shù),二者區(qū)別:print()具有返回值,返回1,而echo()則沒有,所以echo()比print()要快一些,print()能應(yīng)用于復(fù)合語句中,而echo()不能。另外echo可以一次輸出多個字符串,而print不可以。
二、字符串的格式化
函數(shù)printf()將一個通過替換值建立的字符串輸出到格式字符串中,語法格式為:
int printf(string $format [,mixed $args])
第一個參數(shù)$format是格式字符串,$args是要替換進來的值,格式字符串里的字符“%”指出了一個替換標(biāo)記。
格式字符串中的每一個替換標(biāo)記都由一個百分號組成,后面可能跟有一個填充字符、一個對齊方式字符、字段寬度和一個類型說明符。字符串的類型說明符為“s”。
所有的轉(zhuǎn)換說明都以一個“%”開始,如果想打印一個“%”,必須使用“%%”。填充字符表明該字符用于填充結(jié)果,使結(jié)果為適當(dāng)大小的字符串,默認情況下使用空格填充;對齊方式字符對字符串和數(shù)組有不同的作用,對于字符串,減號“-”使該字符串右對齊(默認為左對齊),對于數(shù)字,加號“+”使正數(shù)在輸出的時候以加號開頭;字段寬度是指字符串應(yīng)該輸出的寬度,如果字符串實際長度小于該值,則使用填充字符填充;類型說明符表示要替換進來的值將要轉(zhuǎn)化的數(shù)據(jù)類型。
函數(shù)sprintf()所帶的參數(shù)和printf()函數(shù)一樣,但是返回的是內(nèi)置的字符串,使得可以在變量中存儲字符串供以后使用。
函數(shù)vprintf()允許在格式后面用數(shù)組作為參數(shù),用法和printf()函數(shù)基本相同。
函數(shù)vsprintf()和vprintf()函數(shù)一樣,可以用數(shù)組作為參數(shù),但不使出字符串。
三、常用字符串函數(shù)
1.計算字符串長度
strlen()函數(shù):int strlen(string $string)
該函數(shù)返回字符串的長度,1個英文字符長度為1個字符,1個漢字長度為2個字符,字符串中的空格也算一個字符。
2.將字符串改變大小寫
strtolower()函數(shù)可以將字符串全部轉(zhuǎn)化為小寫,使用strtoupper()函數(shù)將字符串全部轉(zhuǎn)化為大寫。
ucfirst()函數(shù)可以將字符串的第一個字符改成大寫,ucwords()函數(shù)可以將字符串中的每個單詞的第第一個字母改成大寫。
3.字符串裁剪
ltrim()、rtrim()、trim()函數(shù)分別用于刪除字符串中最左邊、最右邊和兩邊與指定的字符,并返回剩余的字符串。
string trim(string $str[,string $charlist])
string rtrim(string $str[,string $charlist])
string ltrim(string $str[,string $charlist])
trim、ltrim、rtrim函數(shù)的默認刪除字符
字符 | ASCII碼 | 意義 |
"" | 32(0x20) | 空格 |
"\t" | 9(0x09) | 制表符 |
"\n" | 10(0x0A) | 換行 |
"\r" | 13(0x0D) | 回車 |
"\0" | 0(0x00) | 空字節(jié) |
"\x0B" | 11(0x0B) | 垂直制表符 |
4.字符串的查找
strstr()函數(shù)和stristr()函數(shù),兩者功能、返回值都一樣,只是stristr()函數(shù)不區(qū)分大小寫。
strstr()函數(shù)的語法格式:string strstr(string $haystack,string $needle)
strstr()函數(shù)用于查找字符串指針$needle在字符串$haystack中出現(xiàn)的位置,并返回$haystack字符串中從$needle開始到$haystack字符串結(jié)束處的字符串。如果沒有返回值,也沒有發(fā)現(xiàn)$needle,則返回FALSE。strstr()函數(shù)還有一個同名函數(shù)strchr()。
5.字符串與ASCII碼
使用ord()函數(shù)可以返回字符的ASCII碼,也可以使用chr()函數(shù)返回ASCII碼對應(yīng)的字符。
四、字符串的比較
比較主要是對字符串的類型及大小寫的比較。字符串的比較可以使用比較運算符“==”、“!=”、“===”、“!==”來進行比較,也可以使用比較函數(shù)來比較。
使用“!=”和“==”比較的兩個對象不一定要類型相等,整型也可以和字符串比較。而“!==”和“===”比較的對象類型要嚴格相同才可能返回TRUE。
常用的字符串比較函數(shù)有:strcmp()、strcasecmp()、strncmp()和strncasecmp()。語法格式如下:
int strcmp(string $str1,string $str2)
int strcasecmp(string $str1, string $str2)
int strncmp(string $str1,string $str2,int $len)
int strncasecmp(string $str1,string $str2,int $len)
四個函數(shù)都用于比較字符串的大小,如果$str1比$str2大,則他們都返回大于0的整數(shù);如果$str1比$str2小,則返回小于0的整數(shù),如果兩者相等,則返回0.
不同的是,strcmp()函數(shù)用于區(qū)分大小寫的字符串比較;strcasecmp()函數(shù)用于不區(qū)分大小寫的比較;strncmp()函數(shù)用于比較字符串的一部分,從字符串的開頭開始比較,$len是要比較的長度;strncasecmp()函數(shù)的作用和strncmp()函數(shù)一樣,只是不區(qū)分大小寫。
五、字符串的替換
字符串的替換指的是使用指定的字符串替換原來字符串中的相關(guān)字符,以組成新的字符串來滿足新的要求。
常用的就是str_replace()函數(shù),語法如下:
mixed str_replace(mixed $search,mixed $replace,mixed $subject[,int &$count])
str_replace()函數(shù)使用新的字符串$replace替換字符串$subject中的$search字符串。$count是可選參數(shù),表示要執(zhí)行的替換操作的次數(shù)。
str_replace()函數(shù)對大小寫敏感,還可以實現(xiàn)多對一,多對多的替換,但無法實現(xiàn)一對多的替換。
使用多對多替換時,第一個數(shù)組中的元素被第二個數(shù)組中對應(yīng)的元素替換,如果有一個數(shù)組比另一個數(shù)組元素少,那不足的部分會當(dāng)作空來處理。
substr_replace()函數(shù)實現(xiàn)替換字符串的一部分,語法格式:
mixed substr_replace(mixed $string,string $replacement,int $start[,int $length])
參數(shù)$string為原字符串,$replacement為要替換的字符串。
$start是開始替換的位置的偏移量,從0開始計算,如果為0或是一個正值,就是從字符串開始處計算的偏移量,如果是負值則是從字符串的末尾計算的偏移量。
$length是可選參數(shù),表示要替換的長度,如果不給定從$start位置開始一直到字符串結(jié)束;如果$length為0,則替換字符串會插入到原字符串中;如果$length是正值,則表示用替換字符串替換掉的字符串成都;如果$length是負值,表示從字符串末尾開始到$length個字符為止停止替換。
六、字符串與HTML
1.將字符轉(zhuǎn)換為HTML實體形式
函數(shù)htmlspecialchars()可以將字符轉(zhuǎn)化為HTML的實體形式。
可以轉(zhuǎn)化為HTML實體形式的特殊字符
原字符 | 字符名稱 | 轉(zhuǎn)換后的字符 |
& | AND記號 | & |
" | 雙引號 | " |
' | 單引號 | '; |
< | 小于號 | < |
> | 大于號 | > |
htmlspecialchars()函數(shù)的語法格式如下:
string htmlspecialchars(string $string[,int $quote_style[,string $charset[,bool $double_encode]]])
參數(shù)$string是要轉(zhuǎn)換的字符串,$quote_style、$charset和$doublt_encode都是可選參數(shù)。$quote_style指定如何轉(zhuǎn)換單引號和雙引號字符,取值可以是ENT_COMPAT(默認值,只轉(zhuǎn)換雙引號)、ENT_NOQUOTES(都不轉(zhuǎn)換)和ENT_QUOTES(都轉(zhuǎn)換)。$charset是字符集,默認為ISO-859-1。參數(shù)$double_encode如果為FALSE則不轉(zhuǎn)換成HTML實體,默認為TRUE
htmlentities()函數(shù)也可以將特殊字符轉(zhuǎn)換為實體,不過htmlspecialchars()函數(shù)只轉(zhuǎn)換&、“、‘、<、>這5個字符,而htmlentities()函數(shù)則會把漢字也進行轉(zhuǎn)化。
2.將HTML實體形式轉(zhuǎn)換為特殊字符
使用htmlspecialchars_decode()函數(shù)可以將HTML的實體形式轉(zhuǎn)化為HTML格式,html_entity_decode()函數(shù)可以把所有HTML實體形式轉(zhuǎn)換為HTML格式
3.換行符的轉(zhuǎn)換
在HTML文件中使用"\n",顯示html代碼時不能顯示換行的效果,這時可以使用nl2br()函數(shù),這個函數(shù)可以用html中的"
"標(biāo)記代替字符串中的換行符"\n"。
七、其他字符串函數(shù)
1.字符串與數(shù)組
(1)字符串轉(zhuǎn)化為數(shù)組
使用explode()函數(shù)可以用指定的字符串分割另一個字符串,并返回一個數(shù)組。
array explode(string $separator ,string $string[,int $limit])
此函數(shù)返回由字符串組成的數(shù)組,每個元素都是$string的一個子串,它們被字符串$separator作為邊界點分割出來。
如果設(shè)置了$limit參數(shù),則返回的數(shù)值包含最多$limit個元素,而最后那個元素將包含$string的剩余部分。如果$limit參數(shù)是負數(shù),則返回除了最后的-$limit個元素外的所有元素。
如果參數(shù)$separator為空字符串(""),explode()函數(shù)將返回FALSE,如果$separator所包含的值在$string中找不到,explode()函數(shù)將返回包含$string單個元素的數(shù)組。
(2)數(shù)組轉(zhuǎn)化為字符串
使用implode()函數(shù)可以將數(shù)組中的字符串連接成一個字符串
string implode(string $glue,array $pieces)
$pieces是保存要連接的字符串的數(shù)組,$glue是用于連接字符串的連接符。
implode()函數(shù)還有一個別名,即join()函數(shù)。
2.字符串加密函數(shù)
crypt()函數(shù)完成加密功能
string crypt(string $str[,string $salt])
該函數(shù)完成的是單向加密功能,即字符串一旦被加密就無法轉(zhuǎn)換成原來的形式。函數(shù)中$str是需要加密的字符串,第二個可選參數(shù)$salt是一個位字串,它能影響加密的暗碼,進一步排除與計算***的可能性。
如果要獲得更高的安全性,可以使用md5()函數(shù),這個函數(shù)使用MD5散列算法,將一個字符串轉(zhuǎn)換成一個長32位的唯一字符串,這個過程是不可逆的。