天天看點

[PHP] 字元串

1. 格式化字元串

1.1 字元串整理

PHP提供了如下3個函數用以清理字元串中多餘的空格:

trim()函數可以去除字元串開始位置和結束位置的空格,并将結果傳回。預設情況下,除去的字元是換行符和回車符、水準和垂直制表符、字元串結束符和空格。除此之外,也可以在函數的第二個參數中提供要過濾的特殊字元。

根據需要,可能會使用ltrim()或rtrim()函數,這三個函數不同之處是,trim()函數将除去整個字元串前後的空格,而ltrim()隻從字元串開始處去除,rtrim()隻從字元串結束處去除。

1.2 HTML格式化

nl2br()函數将字元串作為輸入參數,用XHTML中的<br />标記代替字元串中的換行符,例如:

1.3 列印輸出格式化

printf()和sprintf()函數都會列印一個字元串,隻是printf()函數是将一個格式化的字元串輸出到浏覽器中,而sprintf()函數是傳回一個格式化了的字元串。它們的原型如下:

格式化字元串中的%是格式轉換說明,可以在式化字元串中使用多個轉換說明。如果有n個轉換說明 ,在格式化字元串後面就應該帶有n個參數,例如:

每個轉換說明都遵循同樣的格式,如下所示:

參數padding_character是可選的,它将被用來填充變量直至所指定的寬度,預設的填充字元是一個空格,如果指定空格或0,就不需要用" ' "作為字首,對于其他字元,必須指定" ' "作為字首。

字元" - "是可選的,它指明該域中的資料應該左對齊,預設是右對齊。

參數width指明函數在這裡為被替換的變量留下多少字元空間。

參數precision表示必須是以一個小數點開始,指明了小數點後面要顯示的位數。

轉換說明類型碼

類型

意義

b

解釋為整數并作為二進制輸出。

c

解釋為整數并作為字元輸出。

d

解釋為整數并作為小數輸出。

f

解釋為雙精度作為浮點數輸出。

o

解釋為整數并作為八進制數輸出。

s

解釋為字元串并作為字元串輸出。

u

解釋為整數并作為非指定小數輸出。

x

解釋為整數并作為帶有小寫字母的十六進制輸出。

X

解釋為整數并作為帶有大寫字母的十六進制輸出。

1.4 改變大小寫

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

大小寫函數

函數

描述

示例

strtoupper()

轉換為大寫。

strtoupper($string)

strtolower()

轉換為小寫。

strtolower($string)

ucfirst()

首字母大寫。

ucfirst($string)

ucwords()

每個單詞首字母大寫。

ucwords($string)

1.5 轉義字元串

部分字元插入到資料庫時可以能會引起問題,比如單引号" ' "、雙引号" " "、反斜杠"\"和NULL字元。為了将這些字元進行轉義處理,可以在它們前面加一個反斜杠。

PHP提供了兩個用于轉義字元串的函數。在字元串寫入到資料庫之前,可以使用addslashes()将它們重新格式化,例如:

在顯示使用者資料之前,必須調用stripslashes()函數去掉反斜杠,例如:

2. 連接配接和分割字元串

2.1 指定字元分割

explode()函數可以将字元串分割成幾個部分,函數原型如下:

這個函數帶有一個輸入字元串作為參數,并根據一個指定的分隔符字元串将字元串本身分割成小塊,傳回到數組中。可以通過limit參數來限制分成字元串小塊的數量。

使用implode()或join()函數來實作與函數explode()相反的效果,将第一個傳入的參數字元将數組中的元素連接配接在一起,例如:

2.2 令牌分割

strtok()函數一次隻從字元串中取出一些片段(令牌),原型如下:

分隔符可以是一個字元,也可以是一個字元串,輸入的字元串會根據分隔符字元串中的每個字元來進行處理,而不是根據整個分隔字元串來分割。

2.3 指定位置分割

函數substr()允許通路一個字元串給定起點和終點的子字元串,函數原型如下:

如果隻有一個正數作為子字元串起點來調用,将得到從起點到字元串結束的整個字元串,例如:

如果隻用一個負數作為子字元串起點來調用,将得到一個原字元串尾部的一個子字元串,字元個數等于給定負數的絕對值,例如:

length參數可以用于指定傳回字元的個數(正數),或是字元串序列的尾部(負數),例如:

3. 字元串比較和替換

3.1 比較字元串

strcmp()、strcasecmp()和strnatcmp()函數可用于字元串的比較,當進行資料排序時,這些函數是非常有用的。

strcmp()函數的原型如下:

該函數需要兩個進行比較的參數字元串,如果兩個字元串相等,函數傳回0,如果按字典順序str1大于str2就傳回一個正數,如果str1小于str2就傳回一個負數。

函數strcasecmp()除了不區分大小寫,其他與strcmp()一樣。

函數strnatcmp()及與對應的不區分大小寫的strnatcasecmp()将按自然排序比較字元串,例如,按字典順序"2"大于"12",但是strnatcmp()中"12"大于"2"。

3.2 測試字元串長度

可以使用strlen()函數來檢查字元串的長度,例如:

3.3 在字元串中查找字元串

為了在一個字元串中查找另一個字元串,可以使用函數strstr()、strchr()、strrchr()和stristr()。

函數strstr()用于在一個較長的字元串中查找比對的字元串或字元,函數strchr()和strstr()完全一樣。函數原型如下:

必須向函數傳遞一個要被搜尋的子字元串參數和一個目标關鍵字字元串參數。如果找到了目标關鍵字的一個精确比對,函數會從目标關鍵字前面傳回被搜尋的字元串,否則傳回false。

函數strstr()有兩個變體,不區分大小寫的stristr()和從最後出現目标關鍵字前面傳回的strrchr()。

3.4 查找子符串的位置

函數strpos()和strrpos()的操作和strstr()類似,但它是傳回目标關鍵字在被搜尋字元串中的位置。函數原型如下:

通常,第一個字元是位置0。可選參數offset是用來指定被搜尋字元串的開始搜尋位置。如果目标關鍵字不在字元串中,函數将傳回false。

3.5 替換子字元串

進行替換操作最常用的函數是str_replace(),函數原型如下:

這個函數用new_needle替換所有haystack中的needle,并且傳回替換後的結果,第四個可選參數是count,包含了要執行的替換操作次數,例如:

可以以數組的方式傳遞所有參數,可以傳遞一個要被替換單詞的數組,一個替換單詞的數組,以及應用這些規則的目标字元串數組。

函數substr_replace()用來在給定位置中查找和替換字元串中特定的子字元串,函數原型如下:

這個函數使用字元串replacement替換字元串string中的一部分,具體是哪一部分取決于起始位置值和可選參數length的值,例如: