PHP 提供多種字串搜尋與截取函數,strstr、strrchr、substr、stristr 名稱相似但行為不同,常導致錯誤使用。本文透過程式碼範例清楚說明四者差異與適用情境。
| 函數 | 大小寫敏感 | 搜尋方向 | 回傳內容 | 典型用途 |
|---|---|---|---|---|
strstr | 是 | 從左至右(第一次出現) | 找到的字元及其後所有字元 | 取得子字串起始位置、截取郵件域名 |
strrchr | 是 | 從右至左(最後一次出現) | 找到的字元及其後所有字元 | 取得路徑檔名、最後一個分隔符後內容 |
stristr | 否(不分大小寫) | 從左至右 | 同 strstr | 大小寫不敏感的關鍵字搜尋 |
substr | 不適用 | 不搜尋,依位置 | 指定起始位置與長度的子字串 | 固定位置截取、負索引從尾部算起 |
$email = 'test@test.com@jb51.net'; echo strstr($email, '@'); // @test.com@jb51.net echo strrchr($email, '@'); // @jb51.net
$email = 'zhangYing@jb51.net'; echo strstr($email, 'y'); // jb51.net (區分大小寫,找小寫 y) echo stristr($email, 'y'); // Ying@jb51.net (不分大小寫,找 Y 或 y)
$email = 'zhangYing@jb51.net'; echo strstr($email, 'y'); // jb51.net echo substr($email, -7); // jb51.net (從倒數第7字元開始)
strstr($haystack, $needle, true)(PHP 5.3+)回傳 $needle 之前的部分。substr($str, -5, 3) 從倒數第5個字元起取3個字元。strstr(..., true) 或 substr($str, 0, strpos($str, $keyword))。strstr 回傳布林值,實際回傳字串或 FALSE。strrchr 時傳入多字元字串,它只看最後一個字元作為分隔符。substr 會按位元組截斷導致亂碼,應用 mb_substr。記住:strstr/stristr/strrchr 都是「找到針頭連同乾草堆後段一起回傳」,差別在大小寫與搜尋方向;substr 是「按座標切割」。實務上配合 mb_* 多位元組函數處理中文更安全。