PHP 內建 trim()、ltrim()、rtrim() 僅能移除字串**首尾**的空白字符。若需移除字串**內部**所有空白 (含全形空格 U+3000、換行 \n/\r、Tab \t、垂直製表 \v、換頁 \f),需自行實現。
str_replace 陣列映射 (效能最佳、語意清晰)<?php
function removeAllWhitespace(string $str): string {
// 定義需移除的字符陣列
$search = [
" ", // 半形空格 U+0020
"\u{3000}", // 全形空格 U+3000 (日文/中文常見)
"\t", // 水平製表
"\n", // 換行 (LF)
"\r", // 回車 (CR)
"\v", // 垂直製表
"\f", // 換頁
"\0", // Null 字符 (視業務需求)
];
return str_replace($search, '', $str);
}
// 測試
$raw = " Hello\u{3000}World\n\tGood\r\nMorning ";
echo removeAllWhitespace($raw); // HelloWorldGoodMorning
?>
preg_replace (功能最強、支援 Unicode 類別)<?php
function removeAllWhitespaceRegex(string $str): string {
// \s 匹配所有空白字符 (含 \t\n\r\f\v),/u 修飾符支援 Unicode
// 若需保留某些字符 (如只保留普通空格),可用 [^\S ] 處理
return preg_replace('/\s+/u', '', $str);
}
// 進階:只移除「不可见」空白,保留普通半形空格
function removeInvisibleWhitespace(string $str): string {
// \p{Zs} = 空白分隔符 (含全形空格),\p{Cc} = 控制字符
// 此處移除 Zs(空格分隔) + Cc(控制字符) 但保留 U+0020
return preg_replace('/[\p{Zs}\p{Cc}]+/u', '', $str);
}
?>
strtr 單字符轉換 (極簡場景)<?php
// 僅需移除少數固定字符時,strtr 效能略優於 str_replace
$trans = [
" " => "", "\u{3000}" => "", "\t" => "", "\n" => "", "\r" => "",
];
$clean = strtr($dirty, $trans);
?>
| 方法 | 相對耗時 | 適用場景 |
|---|---|---|
str_replace($arr, '', $str) | 1.0x (基準) | 固定字符清單、大量資料、最快 |
preg_replace('/\s+/u', '', $str) | ~3-5x | 需 Unicode 語意、動態模式、複雜規則 |
strtr($trans, $str) | ~0.8x | 單字符映射、極小字符集 |
removeAllWhitespace()。<pre> 等標籤內容)。str_replace 陣列版:明確列出需移除字符,無正則編譯開銷,效能最穩定。preg_replace('/\s/u') 在 PHP 7.3+ 會匹配,但舊版本可能遺漏,陣列法最保險。mb_internal_encoding('UTF-8'),避免多位元組字符截斷。Str::cleanWhitespace() 或 StringHelper::removeInvisibleChars(),專案統一呼叫。一行 str_replace([...], '', $str) 即可解決 90% 場景,複雜 Unicode 需求再升級正則。別讓隱形空白字符汙染你的資料。