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

PHP 刪除字串首尾指定字元:正確使用 trim 系列與 substr_replace

     編輯:PHP 相關知識

常見需求:移除字串開頭的 akmumu/ 與結尾的 .json。直接用 ltrim/rtrim 會因「字元列表」語意導致錯誤刪除,本文說明正確姿勢。

錯誤示範

$str = 'akmumu/writedb.json';
$str = ltrim($str, 'akmumu/'); // 危險!
$str = rtrim($str, '.json');   // 危險!
// 結果:/writedb  (ltrim 刪除了所有 a,k,m,u,/, 字元;rtrim 刪除了所有 .,j,s,o,n 字元)

原因: trim($str, $charlist) 的第二參數是**字元集合**,而非子字串。會刪除所有出現在列表中的字元,直到遇到不在列表中的字元為止。

正確方案:精確匹配前綴/後綴

$str = 'akmumu/writedb.json';

// 刪除開頭固定前綴
$prefix = 'akmumu/';
if (strpos($str, $prefix) === 0) {
    $str = substr($str, strlen($prefix));
}

// 刪除結尾固定後綴
$suffix = '.json';
$suffixLen = strlen($suffix);
if (substr($str, -$suffixLen) === $suffix) {
    $str = substr_replace($str, '', -$suffixLen);
}

// 結果:writedb

封裝為通用函數

function remove_prefix($str, $prefix) {
    return (strpos($str, $prefix) === 0) ? substr($str, strlen($prefix)) : $str;
}
function remove_suffix($str, $suffix) {
    $len = strlen($suffix);
    return ($len > 0 && substr($str, -$len) === $suffix) ? substr_replace($str, '', -$len) : $str;
}
// 使用
$str = remove_suffix(remove_prefix($str, 'akmumu/'), '.json');

進階:正則替換(僅首尾)

$str = preg_replace('/^akmumu\//', '', $str); // ^ 鎖定開頭
$str = preg_replace('/\.json$/', '', $str);   // $ 鎖定結尾

總結

  • trim/ltrim/rtrim 只適合刪除**單一字元集合**(如空白字元 " \t\n\r\0\x0B")。
  • 刪除**固定子字串前綴/後綴**必須用 substr/substr_replace 或正則錨點 ^/$。
  • 防禦性編程:先判斷是否存在再刪除,避免誤傷內容相似字串。

掌握字串處理函數的真實語意,能避免 90% 的「莫名其妙被過度截斷」Bug。

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