PHP 入门 - 3.字符串
文章目錄
- 引用字符串常量
- 變量插值
- 直接使用:
- 用大括號:
- 單引號括起來的字符串
- here文檔
- 輸出字符串
- echo
- printf()
- print_r 和 var_dump()
- 整理字符串
- 刪除空白符號
- 改變大小寫
- 編碼和轉義
- HTML
- 對**所有**特殊字符進行實體引用
- 只對 HTML 語法字符進行引用
- 刪除 HTML 標簽
- 提取元標簽(meta tag)
- URL
- RFC 3986 編碼和解碼
- 查詢字符串編碼
- SQL
- C語言字符串編碼
- 比較字符串
- 精確比較
- 自然排序與字典序之間的區別
- 近似比較
- 處理和查找字符串
- 子串
- 其他字符串函數
- 分解字符串
- 字符串查找函數
- 解析 URL
引用字符串常量
PHP 中可以使用三種方法來引入字符串的字面量:單引號、雙引號和 UNIX Shell 衍生出來的 here 文檔格式( heredoc )。不同之處在于是否識別特殊的轉義序列(對字符串進行編碼和變量插值)和是否對變量進行解析
變量插值
在字符串中用變量的值來替換變量名。
直接使用:
$who = 'Kilroy'; $where = 'here'; echo "$who was $where"; // Kilroy was here用大括號:
$n = 12; echo "You are the {$n}th person"; // You are the 12th person和一些 shell 環境不同,PHP 中的字符串不會重復解析,只處理在雙引號字符串中的解析,然后把其結果作為字符串的值。
$bar = 'this is not printed'; $foo = '$bat'; print("$foo"); // $bar單引號括起來的字符串
不能插值。除了 \' 和 \\ 可以被轉義,其他任何的反斜杠只被解析成一個反斜杠。
here文檔
heredoc 由 <<< 和 標識符組成。并且其中的雙引號和單引號被跳過,空白符被保留。
$dialogue = <<< NoMore"It's not going to happen!" she fumed. NoMore; echo $dialogue; // 輸出: "It's not going to happen!" she fumed.輸出字符串
echo
echo 不是一個函數(它是一個語言結構),因此你不一定要使用小括號來指明參數,單引號,雙引號都可以。如果你想給 echo 傳遞多個參數, 那么就不能使用小括號。
另外,在 echo 中拼接字符串,要考慮 , 和 . 運算符的優先級。 , 的優先級非常的低,所以不需要圓括號保證優先級。 . 具有更高的優先級,為了正確性,必須使用圓括號。
echo "Sum: ", 1 + 2; // Sum: 3 echo "Hello ", isset($name) ? $name : "John Doe", "!"; // Hello John Doe! echo 'Sum: ' . (1 + 2); // Sum: 3 echo 'Hello ' . (isset($name) ? $name : 'John Doe') . '!'; // Hello John Doe!echo 和 print 最主要的不同之處是,echo 接受參數列表,并且沒有返回值。
echo 是用來打印字符串的,所以用 echo 來打印數組會報錯。
print 實際上不是函數(而是語言結構),所以可以不用圓括號包圍參數列表。和 echo 最主要的區別: print 僅支持一個參數,并總是返回 1。
if (print("test")){ // testprint("It worked!"); // It worked! }printf()
通過替換模板(即格式化字符串)中的值所生成的字符。它源自標準的 C 庫中的同名函數 printf()
printf(format[, $args[,...]]):int // 使用 printf("$.2f", 27.452); // 27.45sprintf() 和 printf() 的參數相同,但是它只返回生成的字符串而不是打印出來。
print_r 和 var_dump()
兩者都是以易于理解的格式打印變量,相對來說 var_dump() 打印的變量更適合閱讀,它會顯示當前值的類型,顯示共有多少個元素,且還會自動加上換行符。
整理字符串
刪除空白符號
- trim(string [, charlist]):string : 返回刪除了首尾空白符的字符串。
- ltrim(string [, charlist]):string : 返回刪除了首部空白的字符串。
- rtrim(string [, charlist]):string : 返回刪除了尾部空白的字符串。
- 可選參數 charlist ,是可以指定要刪除的字符列表。
不指定 charlist ,默認刪除的字符為:
| " " | 0x20,32 | 空格 |
| “\t” | 0x09,9 | 制表符 |
| “\n” | 0x0A,10 | 換行符 |
| “\r” | 0x0D,13 | 回車符 |
| “\0” | 0x00,0 | 空字節 |
| “\x0B” | 0x0B,11 | 縱向制表符 |
改變大小寫
- strtolower(string):string : 將字符串轉換成大寫。
- strtoupper(string):string : 將字符串轉換成小寫。
編碼和轉義
HTML
HTML 中的特殊字符以實體字符標識,如 &(&) 和 <(<)
對所有特殊字符進行實體引用
htmlentities(string[, flags[, encoding[, double_encode]]]):string 將 HTML 字符轉換成對應的實體字符。
string 為輸入的字符,flags 為選擇哪種模式的轉換,encoding 為字符串的編碼, double_encode 為是否轉現有的 HTML 實體。
只對 HTML 語法字符進行引用
htmlspecialchars(string[, flags[, encoding[, double_encode]]]):string 參數與上面相同,只是對部分實體進行轉換:&(&) "(") '(') <(<) >(≷)
刪除 HTML 標簽
strip_tags(string[, allowable_tags]):string : 從字符串中刪除 HTML 標簽。
allowable_tags 來指定字符串中不被刪除的標簽。只用列出標簽的開始形式。
提取元標簽(meta tag)
get_meta_tags(filename|url[, use_include_path]):array : 從一個文件中提取所有的 meta 標簽的 content 屬性,返回一個數組。
將 use_include_path 設置為 TRUE 將使 PHP 嘗試按照 include_path 標準包含路徑中的每個指向去打開文件。只用于本地文件,不適用與 URL 。
URL
應該只對部分 URL 進行編碼:http://www.example.com/{這里進行編碼}
RFC 3986 編碼和解碼
- rawurlencode(string):string : 編碼函數,除了-,_,. 之外的所有非字母數字字符都會被替換成百分號( % )后跟兩位進制數。
- rawurldecode(string):string : 解碼函數。
查詢字符串編碼
- urlencode(string):string :編碼函數
- urldecode(string):string :解碼函數
與 PFC 3986 相比,唯一的區別在于將空格編碼成加號( + ),而不是 %20 。這兩個函數對生成查詢字符串很有幫助
SQL
在 SQL 中對查詢字符串進行轉義,只需將單引號、雙引號、空字符和反斜杠前面加上反斜杠即可
- addslashes(string):string : 將單引號、雙引號、空字符和反斜杠前面加上反斜杠。
- stripslashes(string):string : 將單引號、雙引號、空字符和反斜杠前面去掉反斜杠。
C語言字符串編碼
- addcslashes(string,charlist):string : 以 C 語言風格使用反斜杠轉義 string 中的字符,其中 charlist 指定要轉義的字符范圍(從小到大,如:A..Z)。
- stripcslashes(string):string : 返回去掉轉義后的字符串。
比較字符串
精確比較
== 比較之前會進行轉換,故:3 == '3',而 === 不進行轉換
對于 “PHP Rocks" < 5 ,這將是 正確的。
因為 “PHP Rocks” 被轉換成了 0 (因為字符串沒有以數字開頭)。所以比較要用到下面的函數。
- strcmp(string,string):int : 以字典序來比較
- strncasecmp(string,string):int : 先轉換成小寫,在進行字典序比較
- strnatcasecmp(string,string):int : 以自然排序比較
自然排序與字典序之間的區別
| pic1.jpg | pic1.jpg |
| pic5.jpg | pic10.jpg |
| pic10.jpg | pic5.jpg |
| pic50.jpg | pic50.jpg |
近似比較
- soundex(string):string : 生成一個字符串大致表示單詞在英語中如何發音。
- metaphone(string[, phonemes]):string : 生成一個字符串大致表示單詞在英語中如何發音。比 soundex() 更加精確。其中指定 phonemes 來限制生成的字符串長度,默認為 0 ,也就是沒有限制。
- similar_text(string1, string2[, &percentage]):int : 返回兩個字符串參數共有的個數,第三個參數是通過引用的方式,來計算共有字符百分比。注意,此算法復雜度為O(n3),且使用遞歸。
- levenshtein(string1,string2[, cost_ins, cost_rep, cost_del]):int : 返回兩個字符串之間的編輯距離
- 編輯距離:通過添加、替換和刪除操作能將 string1 轉換成 string2。如:levenshtein("cat","cot") 返回 1
- 另外三個選項是指定插入、替換和刪除操作的次數,來查看函數的結果。
處理和查找字符串
子串
-
substr(string, start[, length]):string : 返回字符串 string 由 start 開始,長度為 length 的子串。
-
substr_count(haystack, needle[, offset[, length]]):int : 返回子字符串 needle 在字符串 haystack 中出現的次數。其中 offset 為偏移位置,length 為從偏移位置開始計算的長度。
-
substr_replace(string, replacement, start[, length]):mixed : 字符串 string 的副本中將由 start 和可選的 length 參數限定的子字符串使用 replacement 進行替換。另:start 可以為負數。如下例子:
//設定 length 為 0 來實現無刪除的插入: echo substr_replace("good bye citizen", "kind ", 9, 0); // good bye kind citizen //設定替換串為 “” 來實現無插入的刪除: echo substr_replace("good bye kind citizen", "", 8; // good bye //如何在字符串開頭插入內容: echo substr_replace("good bye", "now it's time to say", , 0); // now it's time to say good bye
其他字符串函數
- strrev(string):string : 返回 string 反轉后的字符串。
- str_repeat(input, multiplier):string : 返回 input 重復 multiplier 此后的結果。
分解字符串
分解:explode(separator, string[, limit]):array : 返回由字符串組成的數組,每個元素都是 string 的一個子串,他們被字符串 separator 作為邊界點分割出來。
合并:implode(separator, array) : 用 separator 將一維數組連接成一個字符串。若只有字符串參數,連接的字符串將沒有分隔符,如:
$arr = array(1,2,3,4); echo implode($arr); // 1234sscanf(string,format[, &...]):mixed : 按照模板來分解一個字符串。
字符串查找函數
-
strpos(haystack, needle[, offset = 0]):int : 返回 needle 在 haystack 中首次出現的位置。注意:如果 needle 出現在 haystack 的開頭,函數返回 0 。故我們在判斷的是否存在與字符串中,一定要用 === 符號來判斷是否找到指定的字符串。
-
strrpos() : 和上述參數一樣,只是返回最后一次出現的位置。
-
strstr(haystack, needle[, before_needle = FALSE]):string : 返回 hatstack 字符串從 needle 第一次出現的位置開始到 haystack 結尾的字符串。若指定 before_needle 為 TRUE ,則將返回 haystack 位置之前的部分。
-
stristr() : 不區分大小寫的 strstr() ,且參數一致。
-
strchr() : strstr() 的別名函數。
-
strtchr(haystack, needle):string : 返回 haystack 字符串中的一部分,以 needle 最后出現的位置開始,知道 haystack 末尾。注意:如果 needle 包含了不止一個字符,那么僅使用第一個字符。needle 如果為數字的話,則轉換成對應的 ascii 碼。
-
strspn(subject, mask[, start[, length]]):int 返回 subject 開頭包含多少個特定的 mask 字符。如下例:
//判斷 $str 字符串是否為一個八進制數 function isOctal($str) {return strspn($str,'01234567') == strlen($str); } -
strcspn(str1, str2[, start[, length]]):int : 返回 str1 中,所有字符都不存在與 str2 范圍的起始子字符串的長度。如:
echo strcspn('hello','l'); // 2 hello 中 有兩個 l ,它默認匹配最后的字符,也就是下標為 3 的 l ,所以這里返回 2
解析 URL
parse_url(url):array : 返回一個由 URL 的各個成分組成的數組。
感謝你看到了這里。如果文章有錯誤,請評論指正,謝謝!
總結
以上是生活随笔為你收集整理的PHP 入门 - 3.字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP 入门 - 2.函数
- 下一篇: PHP 入门 - 4.正则表达式