PHP有一個海量字符串操作庫,提供了大約100個分割、連接、解析和搜索文本的功能。在這一點上,PHP的性能是如此地強大以至於在處理字符串相關問題時,判斷哪一個是最好的方法會比較困難。本文中我講了10個通常會用到的字符串處理的解決方案。
1. 判定字符串長度
到目前為止,這是本文中展示的最簡單的例子,以至於我差點忽略掉它。
$text = “sunny day”;
$count = strlen($text);
// $count = 9
2. 截短文本做成摘要形式
以新聞為主的網站通常會把每篇文章的前200個左右的字符提取出來並在被截短的字符串後邊加上省略符號生成一個新聞摘要。可以用substr_replace()函數實現這個功能。由於空間的原因,我將用一個截取40個字母的例子來論證這個效果。
$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文檔。