首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 字串函式大全:分類速查、常見陷阱與效能優化指南

     編輯:PHP 相關知識

前言

字串處理是 PHP 開發最高頻操作。本文將 60+ 字串函式依功能分類,附上參數、回傳值、常見陷阱、效能建議與現代替代方案(PHP 8.x 新函式),做為開發隨手查閱的速查表。

分類速查表

1. 大小寫轉換

函式說明範例注意
strtolower全轉小寫'ABC' → 'abc'Locale 敏感,多語系用 mb_strtolower
strtoupper全轉大寫'abc' → 'ABC'同上
ucfirst首字大寫'hello' → 'Hello'僅第一字元
ucwords每單字首字大寫'hello world' → 'Hello World'分隔符預設空白,可自訂
lcfirst首字小寫'Hello' → 'hello'PHP 5.3+
mb_strtolower多位元組安全小寫'ÄÖÜ' → 'äöü'需 mbstring,指定 encoding
mb_strtoupper多位元組安全大寫'ß' → 'SS' (德文)同上
mb_convert_case多模式轉換MB_CASE_TITLE/LOWER/UPPER最完整

2. 修剪與填充

函式說明範例
trim去除首尾空白字元' abc ' → 'abc'
ltrim / rtrim去除左/右側
str_pad填充至指定長度str_pad('5',3,'0',STR_PAD_LEFT) → '005'
choprtrim 別名不建議使用(語意混淆)

3. 查找與比較

函式說明回傳效能/陷阱
strpos找子字串首次位置int|false嚴格用 !== false 判斷,0 會被視為 false
stripos大小寫不敏感 strposint|false同上
strrpos找最後一次位置int|false
strripos大小寫不敏感 strrposint|false
strstr / strchr從首次出現處到結尾string|false第三參數 true 取前段 (PHP 5.3+)
stristr大小寫不敏感 strstrstring|false
strrchr從最後一次出現處到結尾string|false
strcmp二進位安全比較-1/0/1區分大小寫
strcasecmp不分大小寫比較-1/0/1
strnatcmp自然排序比較-1/0/1'file2' < 'file10'
strnatcasecmp自然排序不分大小寫-1/0/1
similar_text相似度百分比floatO(N^3) 極慢,大字串慎用
soundex / metaphone發音編碼比較string英文姓名搜尋適用

4. 切割與合併

函式說明範例注意
explode分隔符切割成陣列explode(',', 'a,b,c') → ['a','b','c']分隔符為空字串會報錯
implode / join陣列合併成字串implode(',', ['a','b']) → 'a,b'參數順序可互換,建議固定 implode($glue, $pieces)
str_split固定長度切割str_split('abcde',2) → ['ab','cd','e']多位元組用 mb_str_split (PHP 7.4+)
chunk_split插入分隔符 (Base64/MIME)chunk_split($b64,76,"\r\n")
preg_split正則切割preg_split('/\s+/', $str)比 explode 慢,複雜分隔符用
strtok循環切割 (狀態式)首次 strtok($str,$delim),後續 strtok($delim)不推薦新代碼,難維護

5. 替換與過濾

函式說明範例效能
str_replace字串替換 (支援陣列)str_replace(['a','b'],['A','B'],$str)快,非正則首選
str_ireplace不分大小寫替換同上
substr_replace指定位置替換substr_replace($str,'X',3,2)
strtr字元/子串轉換strtr($str,['a'=>'A','b'=>'B'])單字元映射極快,子串模式較慢
preg_replace正則替換preg_replace('/\d+/','*',$str)慢,複雜模式才用
preg_replace_callback回呼替換動態計算替換值
strip_tags移除 HTML/PHP 標籤strip_tags($html,'<b><i>')不保證安全,防 XSS 用 HTMLPurifier

6. 編碼與轉義

函式說明用途
htmlspecialchars特殊字元轉 HTML 實體輸出到 HTML 必用,預設雙引號不轉,加 ENT_QUOTES
htmlentities所有字元轉實體較完整,體積大
htmlspecialchars_decode反向解碼
html_entity_decode反向解碼
addslashes引號加反斜線舊式 SQL 轉義,**棄用**,改用 Prepared Statement
stripslashes移除反斜線
quotemeta正則元字元轉義preg_quote 更完整
urlencode / rawurlencodeURL 編碼rawurlencode 依 RFC 3986 (空格→%20),urlencode 空格→+
urldecode / rawurldecodeURL 解碼
base64_encode / decodeBase64 編碼二進位傳輸、Token
bin2hex / hex2bin二進位↔十六進位資料庫存二進位、簽名驗證
convert_uuencode / uudecodeUUEncode舊郵件傳輸,罕用

7. 格式化與解析

函式說明範例
sprintf / printf格式化字串sprintf('%04d', 5) → '0005'
vprintf / vsprintf陣列參數版vsprintf('%s-%s', ['a','b'])
number_format千分位格式化number_format(1234.5,2,'.',',') → '1,234.50'
money_format貨幣格式 (已棄用 PHP 8.0)改用 NumberFormatter
parse_str查詢字串解析到變數parse_str('a=1&b=2',$arr) → $arr=['a'=>1,'b'=>2]
sscanf格式化掃描sscanf('123-456','%d-%d') → [123,456]

8. 多位元組字串 (mbstring 必裝)

函式對應單位元組說明
mb_strlenstrlen字元數而非位元組數
mb_substrsubstr安全截取中文
mb_strposstrpos
mb_strrposstrrpos
mb_strtolowerstrtolower
mb_strtoupperstrtoupper
mb_convert_encoding-編碼轉換 (UTF-8↔BIG5 等)
mb_detect_encoding-偵測編碼
mb_str_splitstr_splitPHP 7.4+ 字元級切割
mb_ereg / mb_eregiereg/eregi正則 (已棄用 ereg,改用 preg 並加 u 修飾符)

9. PHP 8.x 新增現代函式

函式說明替代
str_contains檢查是否包含子字串strpos($hay,$needle)!==false
str_starts_with檢查開頭strpos($hay,$needle)===0
str_ends_with檢查結尾substr($hay,-strlen($needle))===$needle
str_decrement / str_increment字母數字遞增/遞減手動運算

常見陷阱與最佳實務

  1. strpos 嚴格判斷:if (strpos($a,$b) !== false),!strpos() 在位置 0 會誤判。
  2. 中文截取用 mb_substr:substr 按位元組切,會產生亂碼。
  3. 正則加 u 修飾符:preg_match('/中文/u', $str) 正確處理 Unicode。
  4. 大量替換用 strtr 單字元映射:比 str_replace 快數倍。
  5. 避免 addslashes 防 SQL 注入:務必用 PDO Prepared Statement。
  6. htmlspecialchars 輸出時加 ENT_QUOTES:htmlspecialchars($str, ENT_QUOTES, 'UTF-8')。
  7. 效能:單引號字串不解析變數,比雙引號快微乎其微,但習慣統一風格。

總結

掌握分類、常用旗標、多位元組對應表與 PHP 8 新函式,能讓字串處理代碼更簡潔、安全、高效。建議將本表匯入團隊 Wiki 或 IDE Snippet,遇到字串操作先查表選最適函式,避免重造輪子或踩坑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved