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

PHP 移除字串首尾空白(含全形空白  )的兩種健壯方法

     編輯:PHP 相關知識

前言

一般 trim() 僅移除 ASCII 空白字元,無法處理  (U+00A0 不換行空白)或全形空白(U+3000)。本文提供兩種健壯解法:正則表達式與 html_entity_decode 配合 trim。

方法一:正則表達式(推薦,通用性最強)

<?php
function trimAll(string $str): string {
    // 移除字串首尾的所有 Unicode 空白字元(含  、全形空白、零寬空白等)
    return preg_replace('/^[\s\p{Z}]+|[\s\p{Z}]+$/u', '', $str);
}

$test = " \xC2\xA0 dfadad 論責民與三英的關系775fd \xC2\xA0 ";
var_dump(trimAll($test));
// string(35) "dfadad 論責民與三英的關系775fd"
?>

\s 匹配 ASCII 空白,\p{Z} 匹配所有 Unicode 分隔符號(Zs, Zl, Zp),u 修飾符啟用 UTF-8 模式。

方法二:html_entity_decode + trim(適用 UTF-8 編碼)

<?php
function trimNbsp(string $str): string {
    // 1. 將 HTML 實體   解碼為實際字元 (U+00A0)
    // 2. trim 移除該字元(需以 UTF-8 位元組序列指定)
    $decoded = html_entity_decode($str, ENT_QUOTES, 'UTF-8');
    return trim($decoded, "\xC2\xA0"); // U+00A0 的 UTF-8 編碼
}

$test = " \xC2\xA0 dfadad 3333adf775fd \xC2\xA0 ";
var_dump(trimNbsp($test));
// string(19) "dfadad 3333adf775fd"
?>

編碼陷阱警示

  • GBK/GB2312 編碼:html_entity_decode 在非 UTF-8 環境下會產生亂碼,且 json_encode 會將非 UTF-8 中文轉為 null。
  • 專案統一 UTF-8:資料庫連線、HTML meta、PHP 檔案編碼、HTTP 標頭全數設為 UTF-8,可避免 99% 編碼問題。

效能比較

總結

處理   等特殊空白,推薦正則 /^[\s\p{Z}]+|[\s\p{Z}]+$/u 一勞永逸;UTF-8 專案亦可用 html_entity_decode + trim。統一 UTF-8 編碼是根本解決之道。希望本文對您的 PHP 程式設計有所幫助。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方法適用編碼處理範圍相對速度
preg_replace (Unicode)UTF-8所有 Unicode 空白中等
html_entity_decode + trimUTF-8  及 ASCII 空白快
trim() 內建所有ASCII 空白のみ最快