string trim(string $string, string $charlist = "")
$charlist 為字元集合(非子字串),預設移除空白字元:空格、\t、\n、\r、\0、\v。$str = "\r\r(:@_@ 內容 @_@:) "; echo trim($str); // (:@_@ 內容 @_@:) echo trim($str, "\r\r(: :)"); // @_@ 內容 @_@
trim($str, "abc") 等同於:
while (str_starts_with($str, 'a') || str_starts_with($str, 'b') || str_starts_with($str, 'c')) {
$str = substr($str, 1);
}
while (str_ends_with($str, 'a') || str_ends_with($str, 'b') || str_ends_with($str, 'c')) {
$str = substr($str, 0, -1);
}
即持續檢查首尾字元是否屬於集合,直到不屬於為止。順序無關,"abc" 與 "cba" 效果相同。
| 需求 | charlist 寫法 | 說明 |
|---|---|---|
| 移除所有數字 | '0..9' | ASCII 範圍展開 |
| 移除控制字元 | "\0..\37" | 八進位 0-31 |
| 移除標點符號 | '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~' | 需逐字列出 |
| 移除全形空格 | trim 無效 | 需 preg_replace 或 PHP 8.3 mb_trim |
$clean = array_map('trim', $_POST); // 遞迴處理多維陣列需自寫
$field = trim($rawField, "\"'"); // 移除首尾雙引號或單引號
$path = trim($path, '/\\'); // 移除首尾斜線
if (trim(strtolower($a)) === trim(strtolower($b))) { ... }
trim 按位元組操作,無法正確移除多位元組字元**(如全形空格 U+3000、零寬空格 U+200B)。
$str = " 內容 "; // 全形空格
trim($str); // 無效
// 方案 1:正則 (通用)
$clean = preg_replace('/^[\s\p{Z}]+|[\s\p{Z}]+$/u', '', $str);
// 方案 2:PHP 8.3+ mb_trim
$clean = mb_trim($str, " \t\n\r\0\x0B\u{3000}\u{200B}", 'UTF-8');
// 方案 3:mbstring 封裝 (舊版)
function mb_trim($str, $charlist = '', $encoding = 'UTF-8') {
$charlist = $charlist ?: " \t\n\r\0\x0B";
$pattern = '/^[' . preg_quote($charlist, '/') + ']+|[' . preg_quote($charlist, '/') + ']+$/u';
return preg_replace($pattern, '', $str);
}
trim 為 C 內建函式,極快,單次呼叫 < 0.01μs,可放心大量使用。trim 同一字串,預先處理存入變數。array_map('trim', $row) 配合 SplFileObject 流式處理。ltrim:僅移除左側rtrim:僅移除右側chop:rtrim 別名(不建議用)mb_trim/mb_ltrim/mb_rtrim:PHP 8.3+ 多位元組原生支援