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

PHP 常用字串函數速查手冊:分割、搜尋、替換、正則、編碼與日期處理

     編輯:PHP 綜合知識

前言

字串處理是 Web 開發最高頻操作。PHP 提供豐富的內建函數,但命名不一、參數順序易混淆。本文分類整理實務高頻函數,附上參數說明與實戰範例,方便快速查閱。

一、分割與合併

函數用途範例備註
implode($glue, $arr)陣列 → 字串implode(',', ['a','b']) → "a,b"別名 join
explode($sep, $str, $limit)字串 → 陣列explode(',', 'a,b,c') → ['a','b','c']$limit > 0 限制筆數
str_split($str, $len)固定長度切割str_split('Hello', 2) → ['He','ll','o']
preg_split($pattern, $str)正則分割preg_split('/[\s,;]+/', $str)功能最強
strtok($str, $tokens)依 token 逐段取出首次傳 $str,後續傳 $tokens內部保持指標
http_build_query($arr)陣列 → URL 查詢字串['a'=>1,'b'=>2] → "a=1&b=2"自動 urlencode

二、搜尋與替換

函數說明回傳值大小寫
strpos($haystack, $needle, $offset)首次出現位置int / false敏感
stripos同上int / false不敏感
strrpos / strripos最後出現位置int / false敏感/不敏感
strstr($haystack, $needle)從 needle 到結尾string / false敏感
stristr同上string / false不敏感
strchr / strrchr同 strstr/strrchrstring / false敏感
str_replace($s, $r, $subj, $count)全域替換string/array敏感
str_ireplace同上string/array不敏感
substr_replace($str, $repl, $start, $len)指定位置替換string敏感
strtr($str, $from, $to)字元對照替換string敏感
preg_replace($pat, $repl, $subj)正則替換string/array依 pattern
preg_filter僅回傳有變更項array依 pattern

strtr 進階用法

// 字元對照
echo strtr('abc', 'ab', 'xy'); // xyc

// 陣列對照 (長鍵優先)
$map = ['www' => 'ftp', 'yahoo' => 'baidu'];
echo strtr('www.yahoo.com', $map); // ftp.baidu.com

三、正則表達式 (PCRE)

// 單次匹配
if (preg_match('/php/i', 'PHP is great')) { echo '匹配'; }

// 全域匹配
preg_match_all('/\d+/', 'a1 b22 c333', $m);
// $m[0] = ['1','22','333']

// 替換並回傳次數
$cnt = preg_replace('/\s+/', '-', 'a  b   c', -1, $count);
// $cnt = 'a-b-c', $count = 2

// 轉義正則特殊字元
$safe = preg_quote('$40 for g3/400', '/'); // \$40 for g3\/400

常用 Pattern 速查

  • \d 數字、\w 單字字元、\s 空白
  • ^ $ 行首行尾、\A \z 字串首尾
  • (?=...) (?!...) (?<=...) (? 前瞻/後顧斷言
  • x 修飾符:忽略 pattern 空白與註解,方便撰寫複雜 regex

四、URL 編碼與解析

函數說明差異
urlencode / urldecode應用程式層編碼空格 → +
rawurlencode / rawurldecodeRFC 3986 標準空格 → %20,不處理 +
parse_url($url)解析 URL 結構回傳關聯陣列
parse_str($str, $arr)查詢字串 → 變數/陣列第二參數建議傳陣列

五、日期時間處理

// 當前時間戳
$ts = time(); // int

// 格式化輸出
echo date('Y-m-d H:i:s', $ts);
echo date('c', $ts); // ISO 8601

// 建立特定時間
$ts = strtotime('2024-01-01 00:00:00');
$ts = mktime(0, 0, 0, 1, 1, 2024);

// DateTime 物件導向 (推薦)
$dt = new DateTime('now', new DateTimeZone('Asia/Taipei'));
$dt->modify('+1 day');
echo $dt->format('Y-m-d H:i:s');

// 計算差異
$diff = $dt1->diff($dt2);
echo $diff->days . ' 天';
echo $diff->format('%h 小時 %i 分鐘');

六、字串比較與相似度

函數說明回傳
strcmp($a, $b)二進位比較-1/0/1
strcasecmp不區分大小寫-1/0/1
strnatcmp / strnatcasecmp自然排序比較-1/0/1
similar_text($a, $b, $pct)相似字元數/百分比int / float
soundex($str)發音編碼 (英文)string
metaphone($str)改良發音編碼string

七、其他實用函數

// 填充
str_pad('5', 3, '0', STR_PAD_LEFT); // '005'

// 反轉
strrev('abc'); // 'cba'

// 字數統計 (英文)
str_word_count('Hello world', 1); // ['Hello', 'world']

// 子字串計數
substr_count('ababa', 'aba'); // 1 (不重疊)

// 取得副檔名
pathinfo('test.jpg', PATHINFO_EXTENSION); // 'jpg'

// 字元編碼轉換
iconv('UTF-8', 'BIG5//IGNORE', $str);
mb_convert_encoding($str, 'UTF-8', 'auto');

八、多位元組字串 (mbstring) 必知

  • 所有 mb_* 函數需指定編碼或預設 mb_internal_encoding('UTF-8')。
  • 常用:mb_strlen, mb_substr, mb_strpos, mb_strtolower, mb_convert_case, mb_ereg_replace。
  • 正則請用 mb_ereg_* 或 PCRE /u 修飾符。

結語

熟練掌握上述函數,能讓字串處理程式碼更簡潔、效能更佳。建議將本表設為編輯器 Snippet 或瀏覽器書籤,遇到字串操作先查手冊,避免重造輪子或踩坑。

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