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

PHP 字串函數完整參考:核心函數分類、常用操作與效能技巧

     編輯:PHP 入門

PHP 字串函數深度參考:分類速查、實戰模式與效能優化

PHP 提供超過 100 個字串處理函數,涵蓋搜尋、替換、格式化、編碼、比較、分割、大小寫轉換等操作。本文將核心函數按功能分類整理,提供常用操作模式、效能比較、陷阱提醒與現代最佳實務。

函數分類速查表

1. 搜尋與定位

2. 替換與修改

函數說明回傳大小寫敏感
strpos首次出現位置int/false是
stripos首次出現位置int/false否
strrpos最後出現位置int/false是
strripos最後出現位置int/false否
strstr首次出現至結尾string/false是
stristr首次出現至結尾string/false否
strrchr最後出現至結尾string/false是
strpbrk任一字元首次出現string/false是
substr_count子字串出現次數int是

3. 分割與合併

函數說明備註
str_replace替換所有出現陣列支援、大小寫敏感
str_ireplace替換所有出現大小寫不敏感
substr_replace指定位置替換長度可為負數
strtr字元/子字串轉換單字元轉換極快、支援陣列
preg_replace正則替換功能最強、效能較低

4. 大小寫轉換

函數說明備註
explode字串分割為陣列分隔字串、不支援正則
preg_split正則分割支援 PREG_SPLIT_* 旗標
str_split固定長度分割UTF-8 需 mb_str_split
implode / join陣列合併為字串分隔字串可選
str_getcsvCSV 解析為陣列支援引號、跳脫

5. 格式化與編碼

函數說明
strtolower轉小寫
strtoupper轉大寫
ucfirst首字元大寫
lcfirst首字元小寫
ucwords每個單字首字元大寫
mb_strtolower/upper多位元組安全版本

6. 比較與相似度

函數說明
sprintf / printf格式化字串 (C 風格)
vsprintf / vprintf陣列參數版本
number_format數字千分位格式化
money_format貨幣格式化 (需 setlocale, PHP 8.0 棄用)
htmlspecialcharsHTML 特殊字元實體化
htmlentities所有適用字元實體化
htmlspecialchars_decode反向操作
html_entity_decode反向操作
urlencode / rawurlencodeURL 編碼
urldecode / rawurldecodeURL 解碼
base64_encode / decodeBase64 編解碼
json_encode / decodeJSON 編解碼
addslashes / stripslashes引號跳脫 (資料庫舊式)
quotemeta正則元字元跳脫

7. 修剪與填充

函數說明
strcmp / strcasecmp二進制/不敏感比較
strncmp / strncasecmp前 n 字元比較
strnatcmp / strnatcasecmp自然排序比較
strcoll依 locale 比較
similar_text相似度百分比
levenshtein編輯距離
soundex / metaphone發音編碼

8. 多位元組字串 (mbstring) 關鍵函數

處理 UTF-8 等多位元組編碼必須使用 mb_* 對應函數:

函數說明
trim / ltrim / rtrim移除首尾/左/右字元 (預設空白)
str_pad填充至指定長度
str_repeat重複字串
wordwrap指定寬度換行
chunk_split固定長度分塊

實戰常用模式

1. 安全輸出 HTML (防 XSS)

function h($str) {
    return htmlspecialchars($str, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
echo "<div>" . h($userInput) . "</div>";

2. 產生 URL 友善 slug

function slugify($str) {
    $str = mb_strtolower(trim($str), 'UTF-8');
    $str = preg_replace('/[^\p{L}\p{N}\s-]/u', '', $str); // 保留字母數字空格連字號
    $str = preg_replace('/[\s-]+/', '-', $str); // 空格連字號合併
    return trim($str, '-');
}

3. 截取 UTF-8 字串不斷字

function mb_truncate($str, $length, $suffix = '...') {
    if (mb_strlen($str) <= $length) return $str;
    return mb_substr($str, 0, $length - mb_strlen($suffix)) . $suffix;
}

4. 高效能字元對應替換 (strtr vs str_replace)

$map = ['&' => '&amp;', '<' => '&lt;', '>' => '&gt;', '"' => '&quot;', "'" => '''];
// 單字元/固定字串映射:strtr 最快 (O(n))
$escaped = strtr($html, $map);

// 複雜模式:str_replace
$escaped = str_replace(array_keys($map), array_values($map), $html);

5. CSV 匯出 (標準 RFC 4180)

function exportCsv($rows, $filename = 'export.csv') {
    header('Content-Type: text/csv; charset=UTF-8');
    header("Content-Disposition: attachment; filename=\"$filename\"");
    header('Pragma: no-cache');
    $out = fopen('php://output', 'w');
    // UTF-8 BOM 讓 Excel 正確識別
    fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF));
    foreach ($rows as $row) {
        fputcsv($out, $row);
    }
    fclose($out);
}

效能優化關鍵點

標準函數多位元組版本
strlenmb_strlen
substrmb_substr
strposmb_strpos
strtolowermb_strtolower
strtouppermb_strtoupper
substr_countmb_substr_count
str_splitmb_str_split (PHP 7.4+)
ereg/eregimb_ereg/mb_eregi (已棄用)

常見陷阱

  1. 字串索引存取:$str[0] 回傳位元組,非字元。UTF-8 用 mb_substr($str,0,1)
  2. strlen vs mb_strlen:前者回傳位元組數,後者回傳字元數
  3. strpos 回傳 0 視為 false:必須用 === false 或 !== false 判斷
  4. htmlspecialchars 預設不編碼單引號:需加 ENT_QUOTES
  5. number_format 浮點精度:大數字用 bcmath 或 gmp
  6. money_format 已移除 (PHP 8.0):改用 NumberFormatter (intl)

總結

PHP 字串函數庫極其豐富,掌握分類體系、多位元組處理原則、效能特性與現代 API (PHP 8+ str_contains, str_starts_with, str_ends_with),能編寫高效、安全、正確的字串處理代碼。核心原則:UTF-8 一律用 mb_*,單字元映射用 strtr,正則最後手段,輸出必經 htmlspecialchars。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
場景推薦函數避免
單字元/固定字串批量替換strtr (單次掃描)多次 str_replace、preg_replace
檢查字串開頭/結尾str_starts_with/str_ends_with (PHP 8+)substr($str,0,3)==='foo'
包含檢查str_contains (PHP 8+)strpos(...) !== false
大量字串連接陣列收集後 implode迴圈中 .=
正則重複使用預編譯模式、快取迴圈中重複 preg_*
UTF-8 字串長度/截取mb_strlen/mb_substrstrlen/substr (會斷字)