PHP 提供了三大內置修剪函數 ltrim()、rtrim()、trim(),加上正則替換可處理全角空格等特殊場景。本文通過代碼實例詳細對比其參數、行為差異與性能,幫助選擇最適合的方案。
ltrim() —— 只刪除左側(開頭)空格<?php
$str = " ...I'm Jacky...";
echo "原始:a{$str}
";
$left = ltrim($str);
echo "ltrim:a{$left}
";
// 刪除指定字符(如點號)
$lleft = ltrim($left, ".");
echo "ltrim('.'):{$lleft}";
?>
ltrim(string $str, string $charlist = " \n\r\t\v\0")rtrim() —— 只刪除右側(結尾)空格<?php
$str = "htm ";
echo "原始:{$str}l
";
echo "rtrim:". rtrim($str) ."l";
?>
ltrim(),作用方向相反。rtrim($path, '/')。trim() —— 同時刪除首尾空格(最常用)<?php
$str = " This line contains\tliberal \r\n use of whitespace.\n\n";
// 1. 首尾修剪
$str = trim($str);
// 2. 合併連續空白為單個空格(進階清理)
$str = preg_replace('/\s(?=\s)/', '', $str); // 刪除後面跟著空白的空白字符
$str = preg_replace('/[\n\r\t]/', ' ', $str); // 換行製表轉空格
echo $str;
?>
ltrim。trim() + 正則可實現「標準化空白」:去首尾、合併連續、統一換行製表為空格。<?php
$str = " 幫客之家 www.jb51.net "; // 含全角空格 U+3000
// 刪除開頭全角/半角空格
$str = mb_ereg_replace('^( | )+', '', $str);
// 刪除結尾全角/半角空格
$str = mb_ereg_replace('( | )+$', '', $str);
// 將中間連續空格替換為換行(示例)
echo mb_ereg_replace(' ', "\n ", $str);
?>
(U+3000)。^[\s\x{3000}]+、[\s\x{3000}]+$(需 u 修飾符)更通用。| 函數 | 適用場景 | 相對性能 | 備註 |
|---|---|---|---|
| trim() | 99% 場景:去除首尾 ASCII 空白 | ★★★★★ (基準) | 首選,C 層實現極快 |
| ltrim()/rtrim() | 單側修剪、指定字符集修剪(如路徑尾斜杠) | ★★★★★ | 同 trim 級別 |
| 正則 mb_ereg_replace | 全角空格、零寬空格、非標準空白字符 | ★★☆☆☆ | 最後手段,注意編碼一致性 |
trim():I('post.name', '', 'trim')(ThinkPHP)或 $name = trim($_POST['name'])。trim():防禦性編程,避免臟數據入庫。preg_replace('/^[\s\x{3000}]+|[\s\x{3000}]+$/u', '', $str) 一次性搞定首尾全半角空格。記住:內置函數永遠是首選,正則只處理內置函數覆蓋不到的邊緣情況。