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

PHP 字串操作函數大全:拼接、替換、查找、比較、分割、合併與編碼實戰

     編輯:PHP 綜合知識

字串處理是 PHP 開發最高頻操作。本文系統整理核心字串函數,按功能分類提供語法、參數說明、常見陷阱與最佳實踐範例,作為開發時的快速查閱手冊。

1. 字串拼接

方式語法說明效能
點號運算子$a . $b基本拼接標準
點號賦值$a .= $b原地追加,迴圈中拼接大字串**必須用此法**,避免重複複製高
雙引號插值"{$a} {$b}"可讀性佳,支援變數、陣列元素、物件屬性插值略低於點號
sprintfsprintf('%s-%s', $a, $b)格式化拼接,適合固定模板中
implode/joinimplode(',', $arr)陣列合併為字串,大量片段拼接首選高
大字串拼接禁忌:迴圈中 `$str = $str . $part` 會導致 O(N²) 記憶體複製。正確:`$parts[] = $part; ... $str = implode('', $parts);` 或 `$str .= $part;`。

2. 字串替換


// 簡單替換 (區分大小寫)
str_replace($search, $replace, $subject, $count = null);

// 正則替換 (強大、複雜)
preg_replace($pattern, $replacement, $subject, $limit = -1, $count = null);

// 多字節安全替換 (需 mbstring)
mb_ereg_replace($pattern, $replacement, $string, $option = 'msr');

// 截取替換 (指定位置、長度)
substr_replace($string, $replacement, $offset, $length = null);
// $offset: 正數從開頭、負數從結尾、0 從開頭
// $length: 正數替換長度、負數保留結尾長度、0 為插入不替換

3. 字串長度與計數


// 位元組長度 (非字元數)
strlen($string);

// 多字節字元長度 (UTF-8 中文每字 3-4 bytes)
mb_strlen($string, 'UTF-8');

// 子字串出現次數
substr_count($haystack, $needle, $offset = 0, $length = null);

// 單詞計數 (支援格式化輸出)
str_word_count($string, $format = 0, $charlist = null);
// format: 0=數量, 1=單詞陣列, 2=關聯陣列(位置=>單詞)

4. 字串查找與位置

函數大小寫回傳值多字節版
strpos敏感首次出現位置 (int) 或 falsemb_strpos
stripos不敏感首次出現位置 (int) 或 falsemb_stripos
strrpos敏感最後出現位置mb_strrpos
strripos不敏感最後出現位置mb_strripos
strstr敏感從首次出現處到結尾的子字串mb_strstr
stristr不敏感從首次出現處到結尾的子字串mb_stristr
嚴格比較:if (strpos($haystack, $needle) !== false) (0 也是有效位置,不可用 if (strpos(...)))。

5. 字串比較


// 區分大小寫
strcmp($str1, $str2);       // 0=相等, <0 str1較小, >0 str1較大
strncmp($str1, $str2, $len); // 比較前 $len 字元

// 不區分大小寫
strcasecmp($str1, $str2);
strncasecmp($str1, $str2, $len);

// 自然排序比較 (人類直覺: "img2" < "img10")
strnatcmp($str1, $str2);
strnatcasecmp($str1, $str2); // 不區分大小寫

// 當地語系感知比較 (需 intl 擴展)
\Collator::create('zh_TW')->compare($str1, $str2);

6. 字串重複、反轉


str_repeat($input, $multiplier); // 重複 $multiplier 次
strrev($string);                 // 反轉字串 (注意多字節會亂碼,需 mb_str_split 反轉陣列再 implode)

7. 字串分割


// 依分隔符分割 (支援正則: preg_split)
explode($delimiter, $string, $limit = PHP_INT_MAX);
// $limit > 0: 最多回傳 $limit 個元素
// $limit < 0: 回傳總數 - |$limit| 個元素
// $limit = 0: 視為 1

// 固定長度分割
str_split($string, $length = 1); // 回傳字元陣列
// 多字節安全分割
mb_str_split($string, $length = 1, 'UTF-8'); // PHP 7.4+

// 正則分割 (彈性)
preg_split($pattern, $string, $limit = -1, $flags = 0);
// flags: PREG_SPLIT_NO_EMPTY, PREG_SPLIT_DELIM_CAPTURE, PREG_SPLIT_OFFSET_CAPTURE

8. 字串合併


implode($glue = '', $pieces); // $glue 預設空字串,建議顯式傳入
join($glue, $pieces);         // implode 別名

9. 大小寫轉換


strtolower($string);      // 全部小寫
strtoupper($string);      // 全部大寫
ucfirst($string);         // 首字元大寫
ucwords($string);         // 每個單詞首字元大寫
// 多字節版
mb_strtolower($string, 'UTF-8');
mb_strtoupper($string, 'UTF-8');
mb_convert_case($string, MB_CASE_TITLE, 'UTF-8'); // 標題大寫 (ucwords 多字節版)

10. 格式化、編碼、清理


// 輸出格式化
printf($format, ...$args);      // 直接輸出
sprintf($format, ...$args);     // 回傳字串
vprintf($format, $args);        // 陣列參數
vsprintf($format, $args);       // 陣列參數回傳字串

// HTML 實體編碼 (防 XSS 必用)
htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, 'UTF-8');
htmlentities($string, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, 'UTF-8');

// URL 編碼
urlencode($string);             // 空格變 +, 適用 application/x-www-form-urlencoded
rawurlencode($string);          // 空格變 %20, 符合 RFC 3986, 適用 URL 路徑
// 解碼
urldecode($string);
rawurldecode($string);

// 移除標籤
strip_tags($string, $allowable_tags = '');

// 去除首尾空白 (含 \n\r\t\v\0)
trim($string, $characters = " \n\r\t\v\0");
ltrim($string); rtrim($string);

// 字元集轉換 (需 iconv/mbstring)
iconv('UTF-8', 'GBK//IGNORE', $string);
mb_convert_encoding($string, 'UTF-8', 'auto'); // 自動偵測來源編碼

11. 進階:多字節字串 (mbstring) 最佳實踐

  • PHP 內建函數多為單字節 (ASCII) 設計,**處理中文/日文/韓文/Emoji 必須使用 `mb_*` 系列函數**並指定編碼 (`'UTF-8'`)。
  • 統一設定內部編碼:`mb_internal_encoding('UTF-8');` (PHP 8.0+ 預設 UTF-8)。
  • 資料庫連線、HTML ``、檔案儲存、API 回應全鏈路 UTF-8。
  • 正則使用 `u` 修飾符:`preg_match('/pattern/u', $str)`。

12. 常用組合技巧


// 產生隨機字串 (Token, 檔名)
bin2hex(random_bytes(16)); // 32 字元十六進位
base64_encode(random_bytes(24)); // URL-safe 需 strtr($s, '+/', '-_')

// 截斷字串並加省略號 (多字節安全)
function truncate(string $str, int $len, string $suffix = '...'): string {
    if (mb_strlen($str) <= $len) return $str;
    return mb_substr($str, 0, $len - mb_strlen($suffix)) . $suffix;
}

// 移除 Emoji (儲存至不支援 utf8mb4 的舊資料庫)
$clean = preg_replace('/[\xF0-\xF7][\x80-\xBF]{3}/', '', $utf8String); // 簡易移除 4-byte UTF-8
// 或用資料庫 utf8mb4 字元集 (推薦)

結語

掌握字串函數分類、多字節陷阱、效能差異 (implode vs 迴圈拼接)、安全編碼 (htmlspecialchars, rawurlencode),能寫出正確、高效、安全的 PHP 代碼。實務上**統一使用 UTF-8 + mbstring 函數 + 準備語句**,可避開 90% 字串相關坑。

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