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 | 歸位 |
\t | Tab |
\v | 垂直 Tab |
\x00 | NUL |
<?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"
?>