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

PHP 移除字串中所有空白字符:空格、全形空格、換行、Tab 的最佳實踐

     編輯:PHP 相關知識

超越 trim():徹底淨化字串的空白字符

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()。
  • JSON/CSV 匯入預處理:移除欄位值內的不可见控制字符,防止解析錯誤。
  • 關鍵字搜尋正規化:將查詢字串內部空白移除,配合資料庫同樣處理,實現「忽略空白」搜尋。
  • 前端傳輸壓縮:移除 HTML/JS/CSS 字串中的空白 (需小心保留 <pre> 等標籤內容)。

最佳實踐建議

  1. 優先使用 str_replace 陣列版:明確列出需移除字符,無正則編譯開銷,效能最穩定。
  2. 全形空格 (U+3000) 必須顯式處理:它不屬於 ASCII \s,preg_replace('/\s/u') 在 PHP 7.3+ 會匹配,但舊版本可能遺漏,陣列法最保險。
  3. 編碼一致性:確保 PHP 檔案儲存為 **UTF-8 無 BOM**,且 mb_internal_encoding('UTF-8'),避免多位元組字符截斷。
  4. 封裝為工具函式:放入 Str::cleanWhitespace() 或 StringHelper::removeInvisibleChars(),專案統一呼叫。

一行 str_replace([...], '', $str) 即可解決 90% 場景,複雜 Unicode 需求再升級正則。別讓隱形空白字符汙染你的資料。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved