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

PHP trim() 函式去除字串首尾空白與特殊字元完整指南

     編輯:PHP 綜合知識

函式定義

string trim(string $string, string $charlist = "")
  • 同時移除字串開頭與結尾的指定字元。
  • $charlist 為字元集合(非子字串),預設移除空白字元:空格、\t、\n、\r、\0、\v。

基本範例

$str = "\r\r(:@_@ 內容 @_@:) ";

echo trim($str);              // (:@_@ 內容 @_@:)
echo trim($str, "\r\r(: :)"); // @_@ 內容 @_@

charlist 運作機制深度解析

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 寫法

需求charlist 寫法說明
移除所有數字'0..9'ASCII 範圍展開
移除控制字元"\0..\37"八進位 0-31
移除標點符號'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'需逐字列出
移除全形空格trim 無效需 preg_replace 或 PHP 8.3 mb_trim

常見應用場景

1. 表單輸入淨化

$clean = array_map('trim', $_POST); // 遞迴處理多維陣列需自寫

2. 解析 CSV 欄位去引號

$field = trim($rawField, "\"'"); // 移除首尾雙引號或單引號

3. 路徑正規化

$path = trim($path, '/\\'); // 移除首尾斜線

4. 字串比較前正規化

if (trim(strtolower($a)) === trim(strtolower($b))) { ... }

多位元組(UTF-8)限制與解決

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 同一字串,預先處理存入變數。
  • 大批量資料清洗(如 CSV 匯入)時,考慮用 array_map('trim', $row) 配合 SplFileObject 流式處理。

相關函式速查

  • ltrim:僅移除左側
  • rtrim:僅移除右側
  • chop:rtrim 別名(不建議用)
  • mb_trim/mb_ltrim/mb_rtrim:PHP 8.3+ 多位元組原生支援
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved