溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP整理筆記七字符串處理

發(fā)布時(shí)間:2020-07-14 11:09:50 來源:網(wǎng)絡(luò) 閱讀:405 作者:菜鳥不菜么 欄目:web開發(fā)

一.字符串格式化

 

整理字符串的第一步是清理字符串中多余的空格。雖然這一部操作不是必需的,但如果要將字符串存入一個(gè)文件或數(shù)據(jù)庫中,或者將它和別的字符串進(jìn)行比較,這就是非常有用的。

chop()函數(shù)移除字符串后面多余的空白,包括新行。

ltrim()函數(shù)移除字符串起始處多余空白。

rtrim()函數(shù)移除字符串后面多余的空白,包括新行,此函數(shù)是chop()的別名。

trim()函數(shù)移除字符串兩邊多余的空白。

<?php

       echo trim('              PHP           ');

?>

 

PHP具有一系列可供使用的函數(shù)來重新格式化字符串,這些函數(shù)的工作方式是各不相同的。

nl2br()函數(shù)將字符串作為輸入?yún)?shù),用XHTML中的<br/>標(biāo)記代替字符串中的換行符。

<?php

       echo nl2br("This is a Teacher!\nThis is a Student!");

?>

 

將特殊字符轉(zhuǎn)換為HTML等價(jià)形式,可以使用htmlentities()htmlspecialchars函數(shù)。如果想要去掉字符串中的HTML去掉,可以使用strip_tags()函數(shù)

<?php

       echo htmlentities('<strong>我是吳祁!</strong>');  //轉(zhuǎn)換所有字符

echo htmlspecialchars('<strong>我是吳祁!</strong>')  //轉(zhuǎn)換特殊字符

echo strip_tags('<strong>我是吳祁!</strong>')  //去掉了<strong>

?>

 

對(duì)于字符串來說,某些字符肯定是有效的,但是當(dāng)將數(shù)據(jù)插入到數(shù)據(jù)庫中的時(shí)候可能會(huì)引起一些問題,因?yàn)閿?shù)據(jù)庫會(huì)將這些字符解釋成控制符。這些有問題的字符就是引號(hào)(單引號(hào)和雙引)、反斜杠(\)和NULL字符。

PHP提供了兩個(gè)專門用于轉(zhuǎn)義字符串的函數(shù)。在將任何字符串寫到數(shù)據(jù)庫之前,應(yīng)該使用addslashes()將它們重新格式化,

在調(diào)用了addslashes()后,所有的引號(hào)都加了斜杠,而stripslashes()函數(shù)去掉了這些斜杠。

<?php

       echo addslashes('This is \a" Teacher! ');

?>

 

可以重新格式化字符串中的字母大小寫。

strtoupper()函數(shù)將字符串轉(zhuǎn)換為大寫

strtolower()函數(shù)將字符串轉(zhuǎn)換成小寫

ucfirst()函數(shù)將第一個(gè)字母轉(zhuǎn)換為大寫

ucwords()函數(shù)將每個(gè)單詞第一個(gè)字母轉(zhuǎn)換為大寫

<?php

       echo strtoupper('yc60.com@gmail.com');

?>

 

填充字符串函數(shù):str_pad()將字符串用指定個(gè)數(shù)的字符填充字符串。

<?php

       echo str_pad('Salad',10).'is good.';

?>

 

 

二.操作子字符串

 

通常,我們想查看字符串的各個(gè)部分。例如,查看句子中的單詞,或者將一個(gè)域名或電子郵件地址分割成一個(gè)個(gè)的組件部分。PHP提供了幾個(gè)字符串函數(shù)來實(shí)現(xiàn)此功能。

 

使用函數(shù)explode()、implode()join()

為了實(shí)現(xiàn)這個(gè)功能,我們將使用的第一個(gè)函數(shù)是explode()。

使用implode()join()函數(shù)來實(shí)現(xiàn)與函數(shù)explode()相反的效果,這兩個(gè)函數(shù)的效果是一致的。

<?php

       $email = 'yc60.com@gmail.com';

       $email_array  = explode('@',$email);

?>

 

使用strtok()函數(shù)

strtok()函數(shù)一次只從字符串取出一些片段(稱為令牌)。對(duì)于一次從字符串中取出一個(gè)單詞的處理來說,strtok()函數(shù)比explode()函數(shù)的效果更好。

<?php

       $str = "I,will.be#back";

       $tok = strtok($str,",.#");

       while($tok) {

           echo "$tok<br \>";

            $tok = strtok(",.#");

       }

?>

 

使用substr()函數(shù)

函數(shù)substr()允許我們?cè)L問一個(gè)字符串給定起點(diǎn)和終點(diǎn)的子字符串。這個(gè)函數(shù)并不適用于我們的例子中,但是,當(dāng)需要得到某個(gè)固定格式字符串中的一部分時(shí),它會(huì)非常有用。

<?php

echo substr("abcdef", 1, 3); 

?>

 

分解字符串:str_split()返回一個(gè)數(shù)組,其中各數(shù)組元素分別是字符串參數(shù)中的一個(gè)字符串。

<?php

       print_r(str_split('This is aTeacher!'));

?>

 

逆置字符串:strrev()可以將一個(gè)字符串逆反過來。

<?php

       echo strrev('This is a Teacher!');

?>

 

三.字符串比較

 

到目前為止,我們已經(jīng)用過"= ="號(hào)來比較兩個(gè)字符串是否相等。使用PHP可以進(jìn)行一些更復(fù)雜的比較。這些比較分為兩類:部分匹配和其他情況。

 

字符串的排序:strcmp()、strcasecmp()strnatcmp()

該函數(shù)需要兩個(gè)進(jìn)行比較的參數(shù)字符串。如果這兩個(gè)字符串相等,該函數(shù)返回0,如果按字典順序str1str2后面(大于str2)就返回一個(gè)正數(shù),如果str1小于str2就返回一個(gè)負(fù)數(shù)。這個(gè)函數(shù)是區(qū)分大小寫的。

 

函數(shù)strcasecmp()除了不區(qū)分大小寫之外,其他和strcmp()一樣。

函數(shù)strnatcmp()及與之對(duì)應(yīng)的不區(qū)分大小寫的strnatcasecmp()函數(shù)是在PHP4中新增的。這兩個(gè)函數(shù)按“自然排序”比較字符串,所謂自然排序是按人們習(xí)慣的順序進(jìn)行排序。

<?php

       echo strcmp('a','b'); 

?>

 

使用strspn()函數(shù)返回一個(gè)字符串中包含有另一個(gè)字符串中字符的第一部分的長度。也就是求兩個(gè)字符串之間相同的部分。

<?php

       echo strspn('gmail','yc60.com@gmail.com');

?>

 

 

使用strlen()函數(shù)測試字符串的長度

可以使用函數(shù)strlen()來檢查字符串的長度。如果傳給它一個(gè)字符串,這個(gè)函數(shù)將返回字符串的長度。例如, strlen("hello")將返回5.

<?php

       echo strlen('This is a Teacher!');

?>

 

 

確定字符串出現(xiàn)的頻率:substr_count()返回一個(gè)字符串在另一個(gè)字符串中出現(xiàn)的次數(shù)。

<?php

       echo substr_count('yc60.com@gmail.com','c');

?>

 

 

 

四.查找替換字符串

 

通常,我們需要檢查一個(gè)更長的字符串中是否含有一個(gè)特定的子字符串。這種部分匹配通常比測試字符串的完全等價(jià)更有用處。

 

在字符串中查找字符串:strstr()strchr()、strrchr()stristr()

函數(shù)strstr()是最常見的,它可以用于在一個(gè)較長的字符串專供查找匹配的字符串或字符。請(qǐng)注意,函數(shù)strchr()strstr()完全一樣。

<?php

       echo strstr('yc60.com@gmail.com','@');

?>

 

函數(shù)strstr()有兩個(gè)變體。第一個(gè)變體是stristr(),它幾乎和strstr()一樣,其區(qū)別在于不區(qū)分字符大小。對(duì)于我們的只能表單應(yīng)用程序來說,這個(gè)函數(shù)非常有用,因?yàn)橛脩艨梢暂斎?/span>"delivery"、"Delivery""DELIVERY"。

 

第二個(gè)變體是strrchr(),它也幾乎和strstr()一樣,只不過是strstr()的別名。

 

查找字符串的位置:strpos()、strrpos()。

函數(shù)strpos()strrpos()的操作和strstr()類似,但它不是返回一個(gè)子字符串,而返回子字符串needle在字符串haystack中的位置。更有趣的是,現(xiàn)在的PHP手冊(cè)建議使用strpos()函數(shù)代替strstr()函數(shù)來查看一個(gè)子字符串在一個(gè)字符串中出現(xiàn)的位置,因?yàn)榍罢叩倪\(yùn)行速度更快。

<?php

       echo strrpos('yc60.com@gmail.com','c');//位置從第0個(gè)開始

?>

 

替換字符串:str_replace()、str_ireplace()substr_replace()

<?php

       echo str_replace('@','#','yc60.com@gmail.com');//區(qū)分大小寫

       echo substr_replace('yc60.com@gmail.com','###',0,5);//第0個(gè)開始取出5個(gè)替換為###

?>

 

 

. 處理中文字符

 

對(duì)于以上的字符串函數(shù),有些可以用于中文,但有些卻不適用中文。所以,PHP提供了專門的函數(shù)來解決這樣的問題。

中文字符可以是gbk,utf8,gb2312

 

mb_strlen() 對(duì)應(yīng)的函數(shù)為strlen()  求字符串的長度

mb_strlen($string,'utf8');

mb_strstr()  對(duì)應(yīng)的函數(shù)為 strstr()  求某字符串到結(jié)尾的字符

mb_strpos() 對(duì)應(yīng)的函數(shù)為 strpos()  求出字符最先出現(xiàn)處

mb_strpos($string,'漢',0,'utf8');

mb_substr() 對(duì)應(yīng)的函數(shù)為 substr()  取出指定的字符串

mb_substr($string,0,1,'utf8');

mb_substr_count() 對(duì)應(yīng)函數(shù)為 substr_str() 返回字符串出現(xiàn)的次數(shù)


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI