PHP有一個海量字符串操做庫,提供了大約100個分割、鏈接、解析和搜索文本的功能。在這一點上,PHP的性能是如此地強大以致於在處理字符串相關問題時,判斷哪個是最好的方法會比較困難。本文中我講了10個一般會用到的字符串處理的解決方案。php
1. 斷定字符串長度web
到目前爲止,這是本文中展現的最簡單的例子,以致於我差點忽略掉它。正則表達式
$text = 「sunny day」;數據庫
$count = strlen($text);數組
// $count = 9安全
2. 截短文本作成摘要形式編輯器
以新聞爲主的網站一般會把每篇文章的前200個左右的字符提取出來並在被截短的字符串後邊加上省略符號生成一個新聞摘要。能夠用substr_replace()函數實現這個功能。因爲空間的緣由,我將用一個截取40個字母的例子來論證這個效果。ide
$article = "BREAKING NEWS: In ultimate irony, man bites dog.";
函數
$summary = substr_replace($article, "...", 40);
工具
// $summary = "BREAKING NEWS: In ultimate irony, man bi..."
3. 計算字符串中的單詞數量
常常能夠看到博客或者以新聞爲主的站點統計一篇文章的字數或者要求發佈文章的人在一個預先定義的字數範圍內發表文章。你能夠用str_word_count()函數實現統計單詞數量的功能。
$article = "BREAKING NEWS: In ultimate irony, man bites dog.";
$wordCount = str_word_count($article);
// $wordCount = 8
若是你想統計某個字符串中的字符數量,能夠用count_chars()函數;
4. 解析CSV文件
文件中的數據一般會用CSV格式存放。CSV用逗號或者相似的預約義的定界符來分割每一列。一般是創建一個PHP腳原本導入數據,並解析或者處理成你所須要的。多年以來,我見過不少不一樣的解析CSV文件的方法,最經常使用的是用fgets()函數和explode()函數聯合起來讀取並解析文件。可是,最容易的辦法是調用一個並沒用被劃分到PHP字符串處理庫的一個函數:fgetcsv()。不管是逗號分隔符仍是別的分隔符,均可以用這個函數來控制輸出。
例以下面的文件:
1,John,Smith,Plumber
2,Mark,Seagal,Instructor
3,Peter,Haines,Writer
用fopen()和fgetcsv(),能夠比較容易地解析文件並檢索到每一組聯繫人的第一個名字。
$fh = fopen(「contacts.csv」, 「r」);
while($line = fgetcsv($fh, 1000, 「,」)) { echo 「Contact: {$line[1]} 「; }
5. 將數組轉換成字符串
某些特定的場合,你可能須要創建一個CSV文件並讀取它的內容。意味着你須要將數據轉換成用逗號分割的字符串格式。若是這個數據是從數據庫裏檢索到的,可能會以數組的方式呈如今你面前。你能夠利用implode()函數將數組轉換成用逗號分割的字符串格式。
$csv = implode(「,」, $record);
6. 將URL轉換成超連接
許多所見即所得編輯器(WYSIWYG editors)提供了一個工具欄,容許用戶的文本中包含超連接。當內容已經提交到頁面上時能夠自動地實現這個過程,減小了發佈者的不變和出現錯誤的機會。preg_replace()函數能夠實現將URL轉換成超連接的功能,它可以根據一個已定義好URL結構的正則表達式來搜索字符串並進行替換。
$url = "W.J. Gilmore, LLC (http://www.wjgilmore.com)";
$url = preg_replace("/http://([A-z0-9./-]+)/", "$0", $url);
// $url = "W.J. Gilmore, LLC
7. 從字符串中移除HTML標籤
做爲一個web開發人員,確保用戶的輸入不包含潛在危險的數據,這些數據能夠形成SQL注入或跨站腳本攻擊是一項重要的任務。PHP語言包含了大量的與安全相關的性能,能夠幫助你過濾數據。你只是但願對用戶的輸入添加一點額外的控制而不是採起一個「焦土策略」的辦法。(scorched earth:焦土策略。例如:軍隊撤退時銷燬一切敵軍可利用之物)例如:你容許用戶在他們的評論裏輸入一些簡單的HTML(好比一個標籤),能夠用strip_tags()函數檢查進行,這個函數不但能夠默認地從一個字符串中移除全部的HTML標籤,並且容許你重寫默認值並指定某個標籤是容許使用的。舉個例子,能夠用下面的語句去掉全部除了「and」之外的標籤:
$text = strip_tags($input, " ");
8. 比較兩個字符串
比較兩個字符串確保它們是同樣的。例如:在用戶輸入密碼及確認密碼的時候,咱們能夠用substr_compare()函數來比較。
$pswd = "secret";
$pswd2 = "secret";
if (! strcmp($pswd, $pswd2)) { echo "The passwords are not identical!"; }
若是在比較兩個字符串的時候不區分大小寫,能夠用strcasecmp()函數。
9. 將換行符轉換成換行標籤
用到的函數是:nl2br();
例子:
<?php
echo nl2br("foo isn'tn bar");
?>
輸出結果是:foo isn't<br /> bar
10. 自適應換行
用到的函數是:wordwrap();
例子:
<?php
$text = "The quick brown fox jumped over the lazy dog.";
$newtext = wordwrap($text, 20, "<br />n");
echo $newtext;
?>
輸出結果是:
The quick brown fox<br />
jumped over the lazy<br />
dog.
小結:
本文所講的內容只是PHP處理字符串中的很小的一部分。更多處理方法請查看PHP文檔。