格式化字符串

  • 2020-09-22 10:04:35
  • 閱讀次數:次
  • 作者:盈嵐科技小編
  • 來(lái)源:http://amzcoolest.com

做網(wǎng)站中,通常,在使用用戶(hù)輸入的字符串(通常來(lái)自HTML表單界面)之前,必須對它們進(jìn)行整理。整理字符串的第一步是清理字符串中多余的空格。雖然這一步操作不是必需的,但如果要將字符串存入一個(gè)文件或數據庫中,或者將它和別的字符串進(jìn)行比較,這就是非常有用的。為了實(shí)現該功能,PHP提供了3個(gè)非常有用的函數。在腳本的開(kāi)始處,當給表單輸入變量定義簡(jiǎn)短變量名稱(chēng)時(shí),可以使用trim()函數來(lái)整理用戶(hù)輸入的數據,如下所示:

$name=trim($name);

$email=trim($email);

$feedback=trim($feedback);

trim()函數可以除去字符串開(kāi)始位置和結束位置的空格,并將結果字符串返回。默認情況下,除去的字符是換行符和回車(chē)符(\n和\r)、水平和垂直制表符(\t和\v)、字符串結束符(\0)和空格。除了這個(gè)默認的過(guò)濾字符列表外,也可以在該函數的第二個(gè)參數中提供要過(guò)濾的特殊字符。根據特定用途,可能會(huì )希望使用ltrim()函數或rtrim()函數。

這兩個(gè)函數的功能都類(lèi)似于trim()函數,它們都以需要處理的字符串作為輸入參數,然后返回經(jīng)過(guò)格式化的字符串。這3個(gè)函數的不同之處在于trim()將除去整個(gè)字符串前后的空格,而ltrim()只從字符串的開(kāi)始處(左邊)除去空格,rtrim()只從字符串的結束處(右邊)除去空格。PHP具有一系列可供使用的函數來(lái)重新格式化字符串,這些函數的工作方式是各不相同的。

?HTML格式化

nl2br()函數將字符串作為輸入參數,用HTML中的<br/>標記代替字符串中的換行符。這對于將一個(gè)長(cháng)字符串顯示在瀏覽器中是非常有用的。例如,使用這個(gè)函數來(lái)格式化顧客反饋信息并將它返回到瀏覽器中:<p><? php echo nl2br($text); ?> </p>

提示:HTML將忽略純空格,所以如果不使用nl2br()函數來(lái)過(guò)濾這個(gè)輸出結果,那么它看上去就是單獨的一行。   

?打印格式化

常用echo命令將字符串輸出到瀏覽器。PHP也支持print()函數,它實(shí)現的功能與echo命令相同,但具有返回值,總是返回1。

使用函數printf()和sprintf(),還可以實(shí)現一些更復雜的格式。它們的工作方式基本相同,只是printf()函數是將一個(gè)格式化的字符串輸出到瀏覽器中,而sprintf()函數是返回一個(gè)格式化了的字符串。

個(gè)函數的基本語(yǔ)法如下:

string sprintf (string format [, mixed args...])int printf (string format [, mixed args...])

傳遞給這兩個(gè)函數的第一個(gè)參數都是字符串格式,它們使用格式代碼而不是變量來(lái)描述輸出字符串的基本形狀。其他參數是用來(lái)替換格式字符串的變量。

【示例】在使用echo時(shí),把要用的變量直接打印至該行中,如下所示:echo "總訂單數量是:$total.";

要使用printf()函數得到相同的結果,應該使用如下語(yǔ)句:printf ("總訂單數量是:%s.", $total);

格式化字符串中的%s是轉換說(shuō)明。它的意思是用一個(gè)字符串來(lái)代替。在這個(gè)例子中,它會(huì )被已解釋成字符串的$total代替。如果保存在$total變量中的值是12.4,這兩種方法都將它打印為12.4。

printf()函數的優(yōu)點(diǎn)在于它可以使用更有用的轉換說(shuō)明來(lái)指定$total為一個(gè)浮點(diǎn)數,它的小數點(diǎn)后面應該有兩位小數,如下所示:

printf ("總訂單數量是:%.2f", $total);

經(jīng)過(guò)這行代碼的格式化處理,存儲在$total中的12.4將打印為12.40。

可以在格式化字符串中使用多個(gè)轉換說(shuō)明。如果有n個(gè)轉換說(shuō)明,在格式化字符串后面就應該帶有n個(gè)參數。每個(gè)轉換說(shuō)明都將按給出的順序被一個(gè)重新格式化過(guò)的參數代替。

printf ("總訂單數量是:%.2f (含運費%.2f) ",$total, $total-shipping);

在這里,第一個(gè)轉換說(shuō)明將使用變量$total,而第二個(gè)轉換說(shuō)明將使用變量$total_shipping。每一個(gè)轉換說(shuō)明都遵循同樣的格式,如下所示:

%['padding-character][-][width]

[.precision]type

所有轉換說(shuō)明都以%開(kāi)始。如果想打印一個(gè)“%”符號,必須使用“%%”。參數padding_character是可選的。它將被用來(lái)填充變量直至所指定的寬度。該參數的作用就像使用計算器那樣在數字前面加零。默認的填充字符是一個(gè)空格,如果指定了一個(gè)空格或0,就不需要使用“'”作為前綴。對于任何其他填充字符,必須指定“'”作為前綴。字符“-”是可選的。它指明該域中的數據應該左對齊,而不是默認的右對齊。參數width告訴printf()函數在這里為將被替換的變量留下多少空間(按字符計算)。

參數precision表示必須是以一個(gè)小數點(diǎn)開(kāi)始。它指明了小數點(diǎn)后面要顯示的位數。

轉換說(shuō)明的最后一部分是一個(gè)類(lèi)型碼。其支持的所有類(lèi)型碼如下表所示。

56ef552da233ee418229299ce7df444e.jpg

當在類(lèi)型轉換代碼中使用printf()函數時(shí),參數的順序并不一定要與轉換說(shuō)明中的順序相同。

?字符串大小寫(xiě)

可以重新格式化字符串中的字母大小寫(xiě)。例如,如果電子郵件中的主題行字符串是以$subject開(kāi)始,可以通過(guò)幾個(gè)函數來(lái)改變它的大小寫(xiě)。這些函數的功能概要如下表所示。該表的第一列顯示了函數名,第二列描述了它的功能,第三列顯示了如何在字符串$subject中使用它,最后一列顯示了該函數的返回值。

56ef552da233ee418229299ce7df444e.jpg

除了使用字符串函數來(lái)重新格式化一個(gè)可見(jiàn)的字符串之外,也可以使用其中的一些函數來(lái)重新格式化字符串,以便將其存入數據庫。對于字符串來(lái)說(shuō),某些字符肯定是有效的,但是當將數據插入到數據庫中時(shí)可能會(huì )引起一些問(wèn)題,因為數據庫會(huì )將這些字符解釋成控制符。這些有問(wèn)題的字符就是引號(單引和雙引)、反斜杠(\)和NULL字符。

需要找到一種標記或是轉義它們的辦法。以便使像MySQL這樣的數據庫能夠理解所表示的是有實(shí)際意義的特殊文本字符,而不是控制序列。為了將這些字符進(jìn)行轉義處理,可以在它們前面加一個(gè)反斜杠。例如,"(雙引號)就變成\"(反斜杠雙引號),\(反斜杠)就變成\\(反斜杠反斜杠)。這個(gè)規則對所有特殊字符都通用,所以如果在字符串中存在\\字符,就需要用\\\進(jìn)行替換。PHP提供了兩個(gè)專(zhuān)門(mén)用于轉義字符串的函數。在將任何字符串寫(xiě)到數據庫之前,如果PHP的默認配置還沒(méi)有啟用該功能,讀者應該使用addSlashes()函數將它們重新格式化,例如:$feedback = addSlashes($feedback);

與許多其他字符串函數一樣,addSlashes()函數需要一個(gè)字符串作為輸入參數,經(jīng)過(guò)該函數處理,將返回一個(gè)重新格式化后的字符串。

如果設置了PHP的配置參數magic_quotes_gpc,則PHP將自動(dòng)添加或去除反斜杠。在PHP新版本的默認安裝情況下,該指令是啟用的。gpc表示GET、POST和cookie,是第一個(gè)字母的組合。這就意味著(zhù),來(lái)自這些方法或方式的變量將被自動(dòng)包括在引號內。使用get_magic_quotes_gpc()函數,可以檢查系統上的這個(gè)指令是否已經(jīng)啟用,如果來(lái)自這些方法的變量被自動(dòng)引用在引號中,該函數將返回true。如果系統上該指令為啟用的,在顯示用戶(hù)數據之前,必須調用stripslashes()函數;否則,這些反斜杠會(huì )被顯示出來(lái)。





當前文章標題:格式化字符串

當前URL:http://amzcoolest.com/news/wzzz/3280.html

上一篇:讀取Cookie和刪除Cookie

下一篇:連接和分割字符串

網(wǎng)站建設、抖音推廣、頭條推廣、微信朋友圈推廣、快手推廣專(zhuān)線(xiàn):15368242187(微信同號)
亚洲精品无码mv在线|新国产精品视频福利免费|日韩高清在线观看不卡一区二区|一本久久a久久精品免费不|亚洲私人无码内射免费观看