# 第八章 字符串處理
**學習要點:**
1.字符串格式化
2.操作子字符串
3.字符串比較
4.查找替換字符串
5.處理中文字符
在每天的編程工作中,處理、調整以至最后控制字符串是很重要的一部分,一般也認為
這是所有編程語言的基礎。不同與其他語言,PHP 沒有那么麻煩地使用數據類型來處理字
符串。這樣一來,PHP 中的字符串處理就再容易不過了。
**一.字符串格式化**
整理字符串的第一步是清理字符串中多余的空格。雖然這一部操作不是必需的,但如果
要將字符串存入一個文件或數據庫中,或者將它和別的字符串進行比較,這就是非常有用的。
chop()函數移除字符串后面多余的空白,包括新行。
ltrim()函數移除字符串起始處多余空白。
rtrim()函數移除字符串后面多余的空白,包括新行,此函數是chop()的別名。
trim()函數移除字符串兩邊多余的空白。
```
<?php echo trim(' PHP '); ?>
```
PHP 具有一系列可供使用的函數來重新格式化字符串,這些函數的工作方式是各不相
同的。
nl2br()函數將字符串作為輸入參數,用XHTML 中的<br />標記代替字符串中的換行符。
```
<?php echo nl2br("This is a Teacher!\nThis is a Student!"); ?>
```
將特殊字符轉換為HTML 等價形式,可以使用htmlentities()和htmlspecialchars 函數。
如果想要去掉字符串中的HTML 去掉,可以使用strip_tags()函數
```
<?php echo htmlentities('<strong>我是吳祁!</strong>'); //轉換所有字符
echo htmlspecialchars('<strong>我是吳祁!</strong>') //轉換特殊字符
echo strip_tags('<strong>我是吳祁!</strong>') //去掉了<strong>
?>
```
對于字符串來說,某些字符肯定是有效的,但是當將數據插入到數據庫中的時候可能會
引起一些問題,因為數據庫會將這些字符解釋成控制符。這些有問題的字符就是引號(單引
號和雙引)、反斜杠(\)和NULL 字符。
PHP 提供了兩個專門用于轉義字符串的函數。在將任何字符串寫到數據庫之前,應該
使用addslashes()將它們重新格式化,
在調用了addslashes()后,所有的引號都加了斜杠,而stripslashes()函數去掉了這些斜杠。
```
<?php echo addslashes('This is \a" Teacher! '); ?>
```
可以重新格式化字符串中的字母大小寫。
strtoupper()函數將字符串轉換為大寫
strtolower()函數將字符串轉換成小寫
ucfirst()函數將第一個字母轉換為大寫
ucwords()函數將每個單詞第一個字母轉換為大寫
```
<?php echo strtoupper('yc60.com@gmail.com'); ?>
```
填充字符串函數:str_pad()將字符串用指定個數的字符填充字符串。
```
<?php echo str_pad('Salad',10).'is good.'; ?>
```
**二.操作子字符串**
通常,我們想查看字符串的各個部分。例如,查看句子中的單詞,或者將一個域名或電
子郵件地址分割成一個個的組件部分。PHP 提供了幾個字符串函數來實現此功能。
使用函數explode()、implode()和join()
為了實現這個功能,我們將使用的第一個函數是explode()。
使用implode()或join()函數來實現與函數explode()相反的效果,這兩個函數的效果是一
致的。
```
<?php $email = 'yc60.com@gmail.com'; $email_array = explode('@',$email); ?>
```
使用strtok()函數
strtok()函數一次只從字符串取出一些片段(稱為令牌)。對于一次從字符串中取出一個
單詞的處理來說,strtok()函數比explode()函數的效果更好。
```
<?php $str = "I,will.be#back"; $tok = strtok($str,",.#"); while($tok) { echo "$tok<br \>";
$tok = strtok(",.#");
} ?>
```
使用substr()函數
函數substr()允許我們訪問一個字符串給定起點和終點的子字符串。這個函數并不適用
于我們的例子中,但是,當需要得到某個固定格式字符串中的一部分時,它會非常有用。
```
<?php echo substr("abcdef", 1, 3); ?>
```
分解字符串:str_split()返回一個數組,其中各數組元素分別是字符串參數中的一個字符
串。
```
<?php print_r(str_split('This is a Teacher!')); ?>
```
逆置字符串:strrev()可以將一個字符串逆反過來。
```
<?php echo strrev('This is a Teacher!'); ?>
```
**三.字符串比較**
到目前為止,我們已經用過"= ="號來比較兩個字符串是否相等。使用PHP 可以進行一
些更復雜的比較。這些比較分為兩類:部分匹配和其他情況。
字符串的排序:strcmp()、strcasecmp()和strnatcmp()
該函數需要兩個進行比較的參數字符串。如果這兩個字符串相等,該函數返回0,如果
按字典順序str1 和str2 后面(大于str2)就返回一個正數,如果str1 小于str2 就返回一個負
數。這個函數是區分大小寫的。
函數strcasecmp()除了不區分大小寫之外,其他和strcmp()一樣。
函數strnatcmp()及與之對應的不區分大小寫的strnatcasecmp()函數是在PHP4 中新增的。
這兩個函數按“自然排序”比較字符串,所謂自然排序是按人們習慣的順序進行排序。
```
<?php echo strcmp('a','b'); ?>
```
使用strspn()函數返回一個字符串中包含有另一個字符串中字符的第一部分的長度。也
就是求兩個字符串之間相同的部分。
```
<?php echo strspn('gmail','yc60.com@gmail.com'); ?>
```
使用strlen()函數測試字符串的長度
可以使用函數strlen()來檢查字符串的長度。如果傳給它一個字符串,這個函數將返回
字符串的長度。例如, strlen("hello") 將返回5.
```
<?php echo strlen('This is a Teacher!'); ?>
```
確定字符串出現的頻率:substr_count()返回一個字符串在另一個字符串中出現的次數。
```
<?php echo substr_count('yc60.com@gmail.com','c'); ?>
```
**四.查找替換字符串**
通常,我們需要檢查一個更長的字符串中是否含有一個特定的子字符串。這種部分匹配
通常比測試字符串的完全等價更有用處。
在字符串中查找字符串:strstr()、strchr()、strrchr()和stristr()
函數strstr()是最常見的,它可以用于在一個較長的字符串專供查找匹配的字符串或字
符。請注意,函數strchr()和strstr()完全一樣。
```
<?php echo strstr('yc60.com@gmail.com','@'); ?>
```
函數strstr()有兩個變體。第一個變體是stristr(),它幾乎和strstr()一樣,其區別在于不區
分字符大小。對于我們的只能表單應用程序來說,這個函數非常有用,因為用戶可以輸入
"delivery"、"Delivery"和"DELIVERY"。
第二個變體是strrchr(),它也幾乎和strstr()一樣,只不過是strstr()的別名。
查找字符串的位置:strpos()、strrpos()。
函數strpos()和strrpos()的操作和strstr()類似,但它不是返回一個子字符串,而返回子字
符串needle 在字符串haystack 中的位置。更有趣的是,現在的PHP 手冊建議使用strpos()
函數代替strstr()函數來查看一個子字符串在一個字符串中出現的位置,因為前者的運行速度
更快。
```
<?php echo strrpos('yc60.com@gmail.com','c'); ?>
```
替換字符串:str_replace()、str_ireplace()、substr_replace()
```
<?php echo str_replace('@','#','yc60.com@gmail.com'); echo substr_replace('yc60.com@gmail.com','###',0,5); ?>
```
**五.處理中文字符**
對于以上的字符串函數,有些可以用于中文,但有些卻不適用中文。所以,PHP 提供
了專門的函數來解決這樣的問題。
中文字符可以是gbk,utf8,gb2312
mb_strlen() 對應的函數為strlen() 求字符串的長度
mb_strstr() 對應的函數為strstr() 求某字符串到結尾的字符
mb_strpos() 對應的函數為strpos() 求出字符最先出現處
mb_substr() 對應的函數為substr() 取出指定的字符串
mb_substr_count() 對應函數為substr_str() 返回字符串出現的次數
最后掃一遍幫助手冊
**注:文章出自李炎恢PHP視頻教程,本文僅限交流使用,不得用于商業用途,否則后果自負。**
- 介紹
- HTML/CSS 教程
- 第 1 章 HTML5 概述
- 第 2 章 基本格式
- 第 3 章 文本元素
- 第 4 章 超鏈接和路徑
- 第 5 章 分組元素
- 第 6 章 表格元素
- 第 7 章 文檔元素
- 第 8 章 嵌入元素
- 第 9 章 音頻和視頻
- 第 10 章 表單元素[上]
- 第 10 章 表單元素[中]
- 第 10 章 表單元素[下]
- 第 11 章 全局屬性和其他
- 第 12 章 CSS 入門
- 第 13 章 CSS 選擇器[上]
- 第 14 章 CSS 顏色與度量單位
- 第 15 章 CSS 文本樣式[上]
- 第 15 章 CSS 文本樣式[下]
- 第 16 章 CSS 盒模型[上]
- 第 16 章 CSS 盒模型[下]
- 第 17 章 CSS 邊框與背景[上]
- 第 17 章 CSS 邊框與背景[下]
- 第 18 章 CSS 表格與列表
- 第 19 章 CSS 其他樣式
- 第 20 章 CSS3 前綴和 rem
- 第 21 章 CSS3 文本效果
- 第 21 章 CSS3 文本效果
- 第 23 章 CSS3 邊框圖片效果
- 第 24 章 CSS3 變形效果[下]
- 第 25 章 CSS3 過渡效果
- 第 26 章 CSS3 動畫效果
- 第 27 章 CSS 傳統布局[上]
- 第 27 章 CSS 傳統布局[下]
- 第 28 章 CSS3 多列布局
- 第 29 章 CSS3 彈性伸縮布局[上]
- 第 29 章 CSS3 彈性伸縮布局[中]
- 第 29 章 CSS3 彈性伸縮布局[下]
- 第 30 章 使用 Emmet 插件
- Bootstrap 教程
- 第 1 章 Bootstrap 介紹
- 第 2 章 排版樣式
- 第 3 章 表格和按鈕
- 第 4 章 表單和圖片
- 第 5 章 柵格系統
- 第 6 章 輔組類和響應式工具
- 第 7 章 圖標菜單按鈕組件
- 第 8 章 輸入框和導航組件
- 第 9 章 路徑分頁標簽和徽章組件
- 第 10 章 巨幕頁頭縮略圖和警告框組件
- 第 11 章 進度條媒體對象和 Well 組件
- 第 12 章 列表組面板和嵌入組件
- 第 13 章 模態框插件
- 第 14 章 下拉菜單和滾動監聽插件
- 第 15 章 標簽頁和工具提示插件
- 第 16 章 彈出框和警告框插件
- 第 17 章 按鈕和折疊插件
- 第 18 章 輪播插件
- 第 19 章 附加導航插件
- 第 20 章 項目實戰--響應式導航[1]
- 第 20 章 項目實戰--響應式輪播圖[2]
- 第 20 章 項目實戰--首頁內容介紹[上][3]
- 第 20 章 項目實戰--首頁內容介紹[下][4]
- 第 20 章 項目實戰--資訊內容[5,6]
- 第 20 章 項目實戰--案例和關于[7]
- javaScript 教程
- javascript快速入門1--JavaScript前世今生,HelloWorld與開發環境
- javascript快速入門2--變量,小學生數學與簡單的交互
- javascript快速入門3--分支判斷與循環
- javascript快速入門4--函數與內置對象
- javascript快速入門5--數組與對象
- javascript快速入門6--Script標簽與訪問HTML頁面
- javascript快速入門7--ECMAScript語法基礎
- javascript快速入門8--值,類型與類型轉換
- javascript快速入門9--引用類型
- javascript快速入門10--運算符,語句
- javascript快速入門11--正則表達式
- javascript快速入門12--函數式與面向對象
- javascript快速入門13--BOM——瀏覽器對象模型(Browser Object Model)
- javascript快速入門14--DOM基礎
- javascript快速入門15--節點
- javascript快速入門15--表單
- javascript快速入門16--表格
- javascript快速入門17--事件
- javascript快速入門18--樣式
- javascript快速入門19--定位
- javascript快速入門20--Cookie
- javascript快速入門21--DOM總結
- javascript快速入門22--Ajax簡介
- javascript快速入門23--XHR—XMLHttpRequest對象
- javascript快速入門24--XML基礎
- javascript快速入門25--瀏覽器中的XML
- javascript快速入門26--XPath
- javascript快速入門27--XSLT基礎
- PHP 教程
- 第一章 如何加載運行已發布的PHP項目
- 第二章 PHP基礎
- 第三章 操作符與控制結構
- 第四章 數學運算
- 第五章 數組
- 第六章 目錄與文件
- 第七章 自定義函數
- 第八章 字符串處理
- 第九章 正則表達式
- 第十章 日期與時間
- 第十一章 表單與驗證
- 第十二章 會話控制
- 第十三章 上傳文件
- 第十四章 處理圖像
- 第十五章 MySQL 數據庫
- 第十六章 PHP 操作MySQL
- 第十七章 面向對象基礎
- 第十八章 面向對象的特性
- 第十九章 面向對象的工具