PHP trim() 去除空白

trim() 函數用來去除字串兩端的空白字元(或指定的字元)。

基本用法

<?php
$str = "  Hello World  ";

echo trim($str);    // "Hello World"
echo strlen($str);  // 15
echo strlen(trim($str));  // 11
?>

語法

trim(string $string, string $characters = " \n\r\t\v\x00"): string
  • $string:要處理的字串
  • $characters:(可選)要去除的字元列表
  • 回傳值:處理後的字串

預設去除的字元

字元說明
空格
\n換行
\r歸位
\tTab
\v垂直 Tab
\x00NUL
<?php
$str = "\t\n  Hello World  \r\n";

echo trim($str);  // "Hello World"
?>

ltrim() - 去除左邊

<?php
$str = "  Hello World  ";

echo ltrim($str);  // "Hello World  "

// 帶有換行
$str = "\n\t  Hello";
echo ltrim($str);  // "Hello"
?>

rtrim() / chop() - 去除右邊

<?php
$str = "  Hello World  ";

echo rtrim($str);  // "  Hello World"

// chop() 是 rtrim() 的別名
echo chop($str);   // "  Hello World"

// 常用於去除尾端換行
$line = "Hello World\n";
echo rtrim($line);  // "Hello World"
?>

指定要去除的字元

<?php
// 去除指定字元
$str = "xxxHello Worldxxx";
echo trim($str, "x");  // "Hello World"

// 去除多種字元
$str = "123Hello World321";
echo trim($str, "123");  // "Hello World"

// 去除範圍
$str = "abcHello Worldcba";
echo trim($str, "a..c");  // "Hello World"

// 去除空格和指定字元
$str = "  --Hello World--  ";
echo trim($str, " -");  // "Hello World"
?>

字元範圍

<?php
// a 到 z
$str = "abcHelloabc";
echo trim($str, "a..c");  // "Hello"

// 數字
$str = "123Hello456";
echo trim($str, "0..9");  // "Hello"
?>

常見應用

清理使用者輸入

<?php
function cleanInput(string $input): string {
    return trim($input);
}

$name = cleanInput("  Alice  ");
echo $name;  // "Alice"

// 處理表單資料
$_POST['name'] = "  Alice  ";
$name = trim($_POST['name'] ?? '');
?>

處理 CSV 資料

<?php
$csv = "name, email, phone";
$fields = array_map('trim', explode(',', $csv));

print_r($fields);
// ['name', 'email', 'phone']
?>

去除 BOM

<?php
// UTF-8 BOM
$bom = "\xEF\xBB\xBF";
$str = $bom . "Hello World";

echo ltrim($str, "\xEF\xBB\xBF");  // "Hello World"
?>

去除路徑分隔符

<?php
$path = "/path/to/file/";

echo trim($path, "/");   // "path/to/file"
echo ltrim($path, "/");  // "path/to/file/"
echo rtrim($path, "/");  // "/path/to/file"
?>

處理多行文字

<?php
$text = "
    Hello
    World
    ";

// 去除首尾的換行和空格
echo trim($text);  // "Hello\n    World"

// 處理每一行
$lines = explode("\n", $text);
$lines = array_map('trim', $lines);
$lines = array_filter($lines);  // 移除空行
print_r($lines);
// ['Hello', 'World']
?>

格式化數字

<?php
// 去除前導零
$number = "00123";
echo ltrim($number, "0");  // "123"

// 注意:如果全是零
$number = "000";
echo ltrim($number, "0");  // ""(空字串)

// 安全的方式
function removeLeadingZeros(string $number): string {
    $result = ltrim($number, "0");
    return $result === "" ? "0" : $result;
}

echo removeLeadingZeros("000");  // "0"
?>

清理 HTML 屬性

<?php
$class = "  btn   btn-primary  ";

// 清理並正規化
$class = preg_replace('/\s+/', ' ', trim($class));
echo $class;  // "btn btn-primary"
?>

處理中文

trim() 處理中文通常沒問題,因為它是按位元組處理的:

<?php
$str = "  你好世界  ";
echo trim($str);  // "你好世界"
?>

但如果要去除中文字元,需要使用正規表示式:

<?php
$str = ",,你好世界,,";

// trim 無法去除中文逗號
echo trim($str, ",");  // 可能無法正常工作

// 使用正規表示式
echo preg_replace('/^[,\s]+|[,\s]+$/u', '', $str);  // "你好世界"
?>

效能考量

<?php
// trim() 是很快的操作
$str = str_repeat("  Hello World  ", 10000);

$start = microtime(true);
$result = trim($str);
$time = microtime(true) - $start;

// 通常是幾毫秒內完成
?>

注意事項

<?php
// trim() 不會去除中間的空格
$str = "Hello   World";
echo trim($str);  // "Hello   World"

// 要處理中間的空格,使用 preg_replace
echo preg_replace('/\s+/', ' ', trim($str));  // "Hello World"

// trim() 回傳新字串,不會修改原字串
$str = "  Hello  ";
$trimmed = trim($str);
echo $str;      // "  Hello  "
echo $trimmed;  // "Hello"
?>