字串處理是 PHP 開發最高頻操作。本文將 60+ 字串函式依功能分類,附上參數、回傳值、常見陷阱、效能建議與現代替代方案(PHP 8.x 新函式),做為開發隨手查閱的速查表。
| 函式 | 說明 | 範例 | 注意 |
|---|---|---|---|
| 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 | 最完整 |
| 函式 | 說明 | 範例 |
|---|---|---|
| trim | 去除首尾空白字元 | ' abc ' → 'abc' |
| ltrim / rtrim | 去除左/右側 | |
| str_pad | 填充至指定長度 | str_pad('5',3,'0',STR_PAD_LEFT) → '005' |
| chop | rtrim 別名 | 不建議使用(語意混淆) |
| 函式 | 說明 | 回傳 | 效能/陷阱 |
|---|---|---|---|
| strpos | 找子字串首次位置 | int|false | 嚴格用 !== false 判斷,0 會被視為 false |
| stripos | 大小寫不敏感 strpos | int|false | 同上 |
| strrpos | 找最後一次位置 | int|false | |
| strripos | 大小寫不敏感 strrpos | int|false | |
| strstr / strchr | 從首次出現處到結尾 | string|false | 第三參數 true 取前段 (PHP 5.3+) |
| stristr | 大小寫不敏感 strstr | string|false | |
| strrchr | 從最後一次出現處到結尾 | string|false | |
| strcmp | 二進位安全比較 | -1/0/1 | 區分大小寫 |
| strcasecmp | 不分大小寫比較 | -1/0/1 | |
| strnatcmp | 自然排序比較 | -1/0/1 | 'file2' < 'file10' |
| strnatcasecmp | 自然排序不分大小寫 | -1/0/1 | |
| similar_text | 相似度百分比 | float | O(N^3) 極慢,大字串慎用 |
| soundex / metaphone | 發音編碼比較 | string | 英文姓名搜尋適用 |
| 函式 | 說明 | 範例 | 注意 |
|---|---|---|---|
| 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) | 不推薦新代碼,難維護 |
| 函式 | 說明 | 範例 | 效能 |
|---|---|---|---|
| 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 |
| 函式 | 說明 | 用途 |
|---|---|---|
| htmlspecialchars | 特殊字元轉 HTML 實體 | 輸出到 HTML 必用,預設雙引號不轉,加 ENT_QUOTES |
| htmlentities | 所有字元轉實體 | 較完整,體積大 |
| htmlspecialchars_decode | 反向解碼 | |
| html_entity_decode | 反向解碼 | |
| addslashes | 引號加反斜線 | 舊式 SQL 轉義,**棄用**,改用 Prepared Statement |
| stripslashes | 移除反斜線 | |
| quotemeta | 正則元字元轉義 | preg_quote 更完整 |
| urlencode / rawurlencode | URL 編碼 | rawurlencode 依 RFC 3986 (空格→%20),urlencode 空格→+ |
| urldecode / rawurldecode | URL 解碼 | |
| base64_encode / decode | Base64 編碼 | 二進位傳輸、Token |
| bin2hex / hex2bin | 二進位↔十六進位 | 資料庫存二進位、簽名驗證 |
| convert_uuencode / uudecode | UUEncode | 舊郵件傳輸,罕用 |
| 函式 | 說明 | 範例 |
|---|---|---|
| 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] |
| 函式 | 對應單位元組 | 說明 |
|---|---|---|
| mb_strlen | strlen | 字元數而非位元組數 |
| mb_substr | substr | 安全截取中文 |
| mb_strpos | strpos | |
| mb_strrpos | strrpos | |
| mb_strtolower | strtolower | |
| mb_strtoupper | strtoupper | |
| mb_convert_encoding | - | 編碼轉換 (UTF-8↔BIG5 等) |
| mb_detect_encoding | - | 偵測編碼 |
| mb_str_split | str_split | PHP 7.4+ 字元級切割 |
| mb_ereg / mb_eregi | ereg/eregi | 正則 (已棄用 ereg,改用 preg 並加 u 修飾符) |
| 函式 | 說明 | 替代 |
|---|---|---|
| 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 | 字母數字遞增/遞減 | 手動運算 |
if (strpos($a,$b) !== false),!strpos() 在位置 0 會誤判。substr 按位元組切,會產生亂碼。preg_match('/中文/u', $str) 正確處理 Unicode。htmlspecialchars($str, ENT_QUOTES, 'UTF-8')。掌握分類、常用旗標、多位元組對應表與 PHP 8 新函式,能讓字串處理代碼更簡潔、安全、高效。建議將本表匯入團隊 Wiki 或 IDE Snippet,遇到字串操作先查表選最適函式,避免重造輪子或踩坑。