移除字串中的空格(含全形、製表符、換行)是資料清洗、關鍵字處理、URL 正規化的常見需求。本文對比四種方法的語義、效能與適用場景。
$str = "ab \t\n ab"; // 含空格、Tab、換行
$result = preg_replace('#\s+#', '', $str); // 移除所有空白字符(空格、Tab、換行、回車)
// 輸出: "abab"
\s 包含 ` \t\n\r\f\v`)。$result = str_replace(' ', '', $str); // 僅移除半形空格
// 輸出: "ab\t\nab"
$result = strtr($str, [' ' => '', "\t" => '', "\n" => '', "\r" => '']);
// 輸出: "abab"
strtr('aba', ['a'=>'b','b'=>'c']) → `bcb` 而非 `ccc`)。function trimAll(string $str): string {
$search = [' ', ' ', "\t", "\n", "\r", "\f", "\v"]; // 半形、全形、控制字符
$replace = ['', '', '', '', '', '', ''];
return str_replace($search, $replace, $str);
}
// 使用
echo trimAll("ab \t\n ab"); // "abab"
1. str_replace(' ', '') : 0.08 秒 ← 單字符最快
2. str_replace($arr, $arr, $str) : 0.12 秒 ← 多字符陣列
3. strtr($str, $map) : 0.15 秒
4. trimAll() : 0.13 秒
5. preg_replace('#\s+#', '', $str): 0.45 秒 ← 最慢
| 需求 | 推薦方法 | 代碼片段 |
|---|---|---|
| 僅移除半形空格,極致效能 | str_replace | str_replace(' ', '', $str) |
| 移除半形/全形空格 + 常見控制字符 | 自定義 trimAll | trimAll($str) |
| 移除所有 Unicode 空白字符(含零寬空格等) | preg_replace | preg_replace('/\p{Z}/u', '', $str) |
| 字符級一對一映射(如全轉半) | strtr | strtr($str, $map) |
str_replace 陣列版。trimAll(),語義清晰、易維護。preg_replace('/\p{Z}/u', '', $str)(需 `u` 修飾符支援 Unicode)。preg_replace,預編譯正則或改用字串函數。