溫馨提示×

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

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

PHP中有哪些字符串格式化函數(shù)

發(fā)布時(shí)間:2020-12-15 16:39:44 來源:億速云 閱讀:229 作者:Leah 欄目:開發(fā)技術(shù)

今天就跟大家聊聊有關(guān)PHP中有哪些字符串格式化函數(shù),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

字符串的格式化就是將字符串處理為某種特定的格式。通常用戶從表單中提交給服務(wù)器的數(shù)據(jù)都是字符串的形式,為了達(dá)到期望的輸出效果,就需要按照一定的格式處理這些字符串后再去使用。經(jīng)常見到的字符串格式化函數(shù)如下圖所示:

PHP中有哪些字符串格式化函數(shù)

注意:在PHP中提供的字符串函數(shù)處理的字符串,大部分都不是在原字符串上修改,而是返回一個(gè)格式化后的新字符串。

一、取出空格和字符串填補(bǔ)函數(shù)

空格也是一個(gè)有效的字符,在字符串中也會(huì)占據(jù)一個(gè)位置。用戶在表單輸入數(shù)據(jù)時(shí),經(jīng)常在無意中會(huì)多輸入一些無意義的空格。因此PHP腳本在接收到通過表單處理過來的數(shù)據(jù)時(shí),首先處理的就是字符串中多余的空格,或者其他一些沒有意義的符號(hào)。在PHP中可以通過ltrim()、rtrim()和trim()函數(shù)來完成這項(xiàng)工作。這三個(gè)函數(shù)的語法格式相同,但作用有所不同。他們的語法格式如下所示:

復(fù)制代碼 代碼如下:


string ltrim(string str[,string charlist])                //從字符串左側(cè)刪除空格或其他預(yù)定義字符
string rtrim(string str[,string charlist])              //從字符串右側(cè)刪除空白字符或其他預(yù)定義字符
string trim(string str[,string charlist])              //從字符串的兩端刪除空白字符或其他預(yù)定義字符


這三個(gè)函數(shù)分別用于從字符串的左、右和兩端刪除空白字符或其他預(yù)定義字符。處理后的結(jié)果都會(huì)以新字符串的形式返回,不會(huì)在原字符串上修改。其中第一個(gè)參數(shù)str是待處理的字符串,為必選項(xiàng)。第二個(gè)參數(shù)charlist是過濾字符串,用于指定希望去除的特殊符號(hào),該參數(shù)為可選。如果不指定過濾字符串,默認(rèn)情況下會(huì)去掉下列字符。

★”":空格
★”0\”:NULL
★”\t”:制表符
★”\n”:新行
★”\r”:回車

此外還可以使用“..”符號(hào)指定需要去除的一個(gè)范圍,例如“0..9”或“a..z”表示去掉ASCII碼值中的數(shù)字和小字母。它們的使用代碼如下所示:

復(fù)制代碼 代碼如下:


<?php
$str = "123 This is a test ..."; //聲明一個(gè)測(cè)試字符串,左側(cè)為數(shù)字開頭,右側(cè)為省略號(hào)
echo ltrim($str,"0..9"); //過濾掉字符串左側(cè)的數(shù)字,輸出This is a test ...
echo rtrim($str,".") //過濾掉字符串右側(cè)的所有“.”,輸出:123 This is a test
echo trim($str,"0..9 A..Z ."); //過濾掉字符串兩端的數(shù)字和大寫字母還有“.”,輸出:his is a test
?>

不僅可以按需求過濾掉字符串中的內(nèi)容,還可以使用str_pad()函數(shù)按需求對(duì)字符串進(jìn)行填補(bǔ)。可以用于對(duì)一些敏感信息的保護(hù),例如數(shù)據(jù)的對(duì)并排列等。其函數(shù)的原型如下所示:

復(fù)制代碼 代碼如下:


string str_pad(string input,int pad_length[,string pad_string[,int pad_type]])


該函數(shù)有4個(gè)參數(shù),第一個(gè)參數(shù)指明要處理的字符串。第二個(gè)參數(shù)給定處理后字符串的長(zhǎng)度,如果該值小于原始字符串的長(zhǎng)度,則不進(jìn)行任何操作。第三個(gè)參數(shù)指定填補(bǔ)時(shí)所用的字符串,它為可選參數(shù),如果沒有指定則默認(rèn)使用空格填補(bǔ)。最后一個(gè)參數(shù)指定填補(bǔ)的方向,它有三個(gè)可選值:STR_PAD_BOTH、STR_PAD_LEFT和STR_PAD_RIGHT,分別代表在字符串兩端、左和右進(jìn)行填補(bǔ)。也是一個(gè)可選參數(shù),如果沒有指定,則默認(rèn)值是STR_PAD_RIGHT。函數(shù)str_pad()的使用代碼如下所示:

復(fù)制代碼 代碼如下:


<?php
$str = "LAMP";
echo str_pad($str,10);         //指定長(zhǎng)度為10,默認(rèn)使用空格在右邊填補(bǔ)“LAMP”
echo str_pad($str,10,"-="STR_PAD_LEFT);     //指定長(zhǎng)度為10,指定在左邊填補(bǔ)“-=-=-=LAMP”
echo str_pad($str,10,"_"STR_PAD_BOTH);     //指定長(zhǎng)度為10,指定在左邊填補(bǔ)“___LAMP___”
?>

二、字符串大小寫的轉(zhuǎn)換

在PHP中提供了4個(gè)字符串大小寫的轉(zhuǎn)換函數(shù),它們都只有一個(gè)可選參數(shù),即傳入要進(jìn)行轉(zhuǎn)換的字符串??梢灾苯邮褂眠@些函數(shù)完成大小寫轉(zhuǎn)換的操作。函數(shù)strtoupper()用于將給定的字符串全部轉(zhuǎn)換為大寫字母;函數(shù)strtolower()用于將給定的字符串全部轉(zhuǎn)換為小寫字母;函數(shù)ucfirst()用于將給定的字符串中的首字母轉(zhuǎn)換為大寫,其余字符不變;函數(shù)ucwords()用于將給定的字符串中全部以空格分割的單詞首字母轉(zhuǎn)換為大寫。下面的程序是這些函數(shù)的使用代碼,如下所示:

復(fù)制代碼 代碼如下:


<?php
$lamp = "lamp is composed of Linux 、Apache、MySQL and PHP";
echo strtolower($lamp); //輸出:lamp is composed of linux、apache、mysql and php
echo strtoupper($lamp); //輸出:LAMP IS CONPOSED OF LINUX、APACHE、MYSQL AND PHP
echo ucfirst($lamp); //輸出:Lamp is composed of Linux 、Apache、MySQL and PHP
echo ucwords($lamp); //輸出: Lamp Is Composed Of Linux 、Apache、MySQL And PHP
?>


這些函數(shù)只是按照他們說明描述的方式工作,要想確保一個(gè)字符串的首字母是大寫字母,而其余的都是小寫字母,就需要使用符合的方式。如下所示:

復(fù)制代碼 代碼如下:


<?php
$lamp = "lamp is composed of Linux 、Apache、MySQL and PHP";
echo ucfirst(strtolower($lamp)); //輸出:Lamp is composed of linux、apache、mysql and php
?>

三、和HTML標(biāo)簽相關(guān)的字符串格式化

HTML的輸入表單和URL上附加資源是用戶將數(shù)據(jù)提交給服務(wù)器的途徑,如果不能很好地處理,就有可能成為黑客攻擊服務(wù)器的入口。例如,用戶在發(fā)布文章時(shí),在文章中如果包含一些HTML格式標(biāo)記或JavaScript的頁面轉(zhuǎn)向等代碼了,直接輸出顯示則一定會(huì)使用頁面的布局發(fā)生改變。因?yàn)檫@些代碼被發(fā)送到瀏覽器中,瀏覽器會(huì)按有效的代碼去解釋。所以在PHP腳本中,對(duì)用戶提交的數(shù)據(jù)內(nèi)容一定要先處理。在PHP中為我們提供了非常全面的HTML相關(guān)的字符串格式化函數(shù),可以有效地控制HTML文本的輸出。

①函數(shù)nl2br()

在瀏覽器中輸出的字符串“<br>”標(biāo)記換行,而很多人習(xí)慣使用“\n”作為換行符號(hào),但瀏覽器中不識(shí)別這個(gè)字符串的換行符。即使有多行文本,在瀏覽器中顯示時(shí)也只有這一行。nl2br()函數(shù)就是在字符串中的每個(gè)新行“\n”之前插入HTML換行符“<br/>”。該函數(shù)的使用如下所示:

復(fù)制代碼 代碼如下:


<?php
echo nl2br("One line.\nAnother line."); //在“\n”前加上“<br/>”標(biāo)記
/*輸出以下兩行結(jié)果
One line.<br/>
Another line.
*/
?>

②函數(shù)htmlspecialchars()

如果不希望瀏覽器直接解析HTML標(biāo)記,就需要將HTML標(biāo)記中的特殊字符轉(zhuǎn)換成HTML實(shí)體。例如,將“<”轉(zhuǎn)換為“&lt;”,將“>”轉(zhuǎn)換為“&gt;”。這樣HTML標(biāo)記瀏覽器就不會(huì)去解析,而是將HTML文本在瀏覽器中原樣輸出。PHP中提供的htmlspecialchars()函數(shù)就可以將一些預(yù)定義的字符串轉(zhuǎn)換為HTML實(shí)體。此函數(shù)用在預(yù)防使用者提供的文字中包含了HTML的標(biāo)記,像是布告欄或是訪客留言板這方面的應(yīng)用。以下是該函數(shù)可以轉(zhuǎn)換的字符:

★“&”(和號(hào))轉(zhuǎn)換為“&amp;”。
★“””(雙引號(hào))轉(zhuǎn)換為“&quot;”。
★“'”(單引號(hào))轉(zhuǎn)換為“&#039;”。
★“<”(小于)轉(zhuǎn)換為“&lt;”。
★“>”(大于)轉(zhuǎn)換為“&gt;”。

該函數(shù)的原型如下:

復(fù)制代碼 代碼如下:


string htmlspecialchars(string string [,int quote_style[,string charset]])


該函數(shù)中第一個(gè)參數(shù)是帶有HTML標(biāo)記待處理的字符串。第二個(gè)參數(shù)用來決定引號(hào)的轉(zhuǎn)換方式。默認(rèn)值為ENT_COMPAT將只轉(zhuǎn)換雙引號(hào),而保留單引號(hào);ENT_QUOTES將同時(shí)轉(zhuǎn)換這兩種引號(hào);而ENT_NOQUOTES將不對(duì)引號(hào)進(jìn)行轉(zhuǎn)換。第三個(gè)參數(shù)用于指定所處理字符串的字符集,默認(rèn)的字符集是“ISO88511-1”。

復(fù)制代碼 代碼如下:


<html>
<body>
<?php
$str = "<B>WebServer:</B> & 'Linux' & 'Apache'"; //將有HTML標(biāo)記和單引號(hào)的字符串
echo htmlspecialchars($str,ENT_COMPAT); //轉(zhuǎn)換HTML標(biāo)記和轉(zhuǎn)換雙引號(hào)
echo "<br>\n";
echo htmlspecialchars($str,ENT_QUOTES); //轉(zhuǎn)換HTML標(biāo)記和轉(zhuǎn)換兩種引號(hào)
echo "<br>\n";
echo htmlspecialchars($str,ENT_NOQUOTES); //轉(zhuǎn)換HTML標(biāo)記和不對(duì)引號(hào)轉(zhuǎn)換
echo "<br>\n";
?>
</body>
</html>

在瀏覽器中的輸出結(jié)果

復(fù)制代碼 代碼如下:


<B>WebServer:</B> & ‘Linux' & ‘Apache'
<B>WebServer:</B> & ‘Linux' & ‘Apache'
<B>WebServer:</B> & ‘Linux' & ‘Apache'


如果在瀏覽器中查看源代碼,會(huì)看到如下結(jié)果:

復(fù)制代碼 代碼如下:


<html>
<body>
&lt;B&gt;WebServer:&lt;/B&gt;&amp;'Linux'&amp;'Apache'<br> //沒有轉(zhuǎn)換單引號(hào)
&lt;B&gt;WebServer:&lt;/B&gt;&amp;&#039;Linux&#039;&amp;&#039;Apache&#039;<br>
&lt;B&gt;WebServer:&lt;/B&gt;&amp;'Linux'&amp;'Apache' //沒有轉(zhuǎn)換單引號(hào)
</body>
</html>

在PHP中還提供了htmlentities()函數(shù),可以將所有的非ASCII碼字符轉(zhuǎn)換為對(duì)應(yīng)的實(shí)體代碼。該函數(shù)與htmlspecialchars()函數(shù)的使用語法格式一致,該函數(shù)可以轉(zhuǎn)義更多的HTML字符。下面的代碼為htmlentities()函數(shù)的使用范例:

復(fù)制代碼 代碼如下:


<?php
$str = "一個(gè)'quote'是<b>bold</b>";
//輸出&0qrave;&raquo;&cedil;&ouml; 'quote' &Ecirc;&Ccedil; &lt;b&gt; &lt:b&gt;bold&lt;/b&gt;
echo htmlentities($str);
//輸出:一個(gè)&#039;quote&#039; 是 &lt;b&gt;bold&lt;/b&gt;
echo htmlentities($str,ENT_QUOTES,gb2312);
?>

在處理表單中提交的數(shù)據(jù)時(shí),不僅要通過前面介紹的函數(shù)將HTML的標(biāo)記符號(hào)和一些特殊字符轉(zhuǎn)換為HTML實(shí)體,還需要對(duì)引號(hào)進(jìn)行處理。因?yàn)楸惶峤坏谋韱螖?shù)據(jù)中的“'”、“””和“\”等字符前將自動(dòng)加上一個(gè)斜線“\”。這是由于PHP配置文件php.ini中的選項(xiàng)magic_quotes_gpc在起作用,默認(rèn)是打開的,如果不關(guān)閉它則要使用函數(shù)stripslashes()刪除反斜線。如果不處理,將數(shù)據(jù)保存到數(shù)據(jù)庫中時(shí),有可能會(huì)被數(shù)據(jù)庫誤當(dāng)成控制符號(hào)而引起錯(cuò)誤。函數(shù)stripslashes()只有一個(gè)被處理字符串作為參數(shù),返回處理后的字符串。通常使用htmlspecialchars()函數(shù)與stripslashes()函數(shù)復(fù)合的方式,聯(lián)合處理表單中提交的數(shù)據(jù)。

函數(shù)stripslashes()的功能是去掉反斜線“\”,如果有連續(xù)兩個(gè)反斜線,則只去掉一個(gè)。與之對(duì)應(yīng)的是另一個(gè)函數(shù)addslashes(),正如函數(shù)名所暗示的,它將在“'”、“””、“\”和NULL字符等前增加必要的反斜線。

函數(shù)htmlspecialchars()是將函數(shù)HTML中的標(biāo)記符號(hào)轉(zhuǎn)換為對(duì)應(yīng)的HTML實(shí)體,有時(shí)直接刪除用戶輸入的HTML標(biāo)簽,也是非常有必要的。PHP中提供的strip_tags()函數(shù)默認(rèn)就可以刪除字符串中所有的HTML標(biāo)簽,也可以有選擇性地刪除一些HTML標(biāo)記。如布告欄或是訪客留言板,有這方面的應(yīng)用是相當(dāng)必要的。例如用戶在論壇中發(fā)布文章時(shí),可以預(yù)留一些可以改變字體大小、顏色、粗體和斜體等的HTML標(biāo)記,而刪除一些對(duì)頁面布局有影響的HTML標(biāo)記。函數(shù)strip_tags()的原型如下所示:

復(fù)制代碼 代碼如下:


string strip_tags(string str[,string allowable_tags]); //刪除HTML的標(biāo)簽函數(shù)


該函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)提供了要處理的字符串,第二個(gè)參數(shù)是一個(gè)可選的HTML標(biāo)簽列表,放入該列表中的HTML標(biāo)簽將被保留,其他的則全部被刪除。默認(rèn)將所有HTML標(biāo)簽都刪除。下面的程序?yàn)樵摵瘮?shù)的使用范圍,如下所示:

復(fù)制代碼 代碼如下:


<?php
$str = "<font color='red' size=7>Linux</font> <i>Apache</i> <u>Mysql</u> <b>PHP</b>";
echo strip_tags($str); //刪除了全部HTML標(biāo)簽,輸出:Linux Apache Mysql PHP
echo strip_tags($str,"<font>"); //輸出<font color='red' size=7>Linux</font>Apache Mysql PHP
echo strip_tags($str,"<b><u><i>"); //輸出Linux <i>Apache</i> <u>Mysql</u> <b>PHP</b>
?>

四、其他字符串格式化函數(shù)

字符串的格式化處理函數(shù)還有很多,只要是想得到所需要格式化的字符串,都可以調(diào)用PHP中提供的系統(tǒng)函數(shù)處理,很少需要自己定義字符串格式化函數(shù)。

①函數(shù)strrev()

該函數(shù)的作用是將輸入的字符串反轉(zhuǎn),只提供一個(gè)要處理的字符串作為參數(shù),返回翻轉(zhuǎn)后的字符串。如下所示:

復(fù)制代碼 代碼如下:


<?php
echo strrev("http://www.lampbrother.net"); //反轉(zhuǎn)后輸出:ten.rehtorbpmal.www//:ptth
?>

②函數(shù)number_format()

number_format()函數(shù)通過千位分組來格式化數(shù)字。該函數(shù)如下所示:

復(fù)制代碼 代碼如下:


string number_format(float number[,int decimals[,string dec_point,string thousands_sep]])

復(fù)制代碼 代碼如下:


<?php
$number = 123456789;
echo number_format($number);      //輸出:123,456,789千位分隔的字符串
echo number_format($number,2);       //輸出:123,456,789.00小數(shù)點(diǎn)后保留兩位小數(shù)
echo number_format($number,2,",",".");       //輸出123.456.789,00千位使用(.)分隔了,并保留兩位小數(shù)
?>

③函數(shù)md5()

隨著互聯(lián)網(wǎng)的普及,黑客攻擊已成為網(wǎng)絡(luò)管理者的心病。有統(tǒng)計(jì)數(shù)據(jù)表明70%的攻擊來自內(nèi)部,因此必須采取相應(yīng)的防范措施來扼制系統(tǒng)內(nèi)部的攻擊。防止內(nèi)部攻擊的重要性還在于內(nèi)部人員對(duì)數(shù)據(jù)的存儲(chǔ)位置、信息重要性非常了解,這使得內(nèi)部攻擊更容易奏效。攻擊者盜用合法用戶的身份信息,以仿冒的身份與他人進(jìn)行通信。所以在用戶注冊(cè)時(shí)應(yīng)該先將密碼加密后再添加到數(shù)據(jù)庫中,這樣就可以防止內(nèi)部攻擊者直接查詢數(shù)據(jù)庫中的授權(quán)表,盜用合法用戶的身份信息。

md5()函數(shù)的作用就是將一個(gè)字符串進(jìn)行MD5算法加密,默認(rèn)返回一個(gè)32位的十六進(jìn)制字符串。

復(fù)制代碼 代碼如下:


<?php
$password = "lampbrother";
echo md5($password)."<br>";
 
//將輸入的密碼和數(shù)據(jù)庫保存的匹配
if(md5($password) == '5f1ba7d4b4bf96fb8e7ae52fc6297aee'){
echo "密碼一致,登錄成功";
}
?>

在PHP中提供了一個(gè)對(duì)文件進(jìn)行MD5加密的函數(shù)md5_file(),使用的方式和md5()函數(shù)相似。

看完上述內(nèi)容,你們對(duì)PHP中有哪些字符串格式化函數(shù)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

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

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

AI