echo rtrim('<p></div>', '</div>'); // 輸出: <p
echo ltrim('www.jb51.net', 'www.'); // 輸出: jb51.net
預期第一行輸出 <p>,第二行輸出 jb51.net,實際卻不同。原因在於 rtrim/ltrim/trim 的第二參數是字元清單,而非字串尾綴。
「你可以透過
charlist參數指定要移除的字元,列出所有要移除的字元。使用..可指定字元範圍。」
rtrim('<p></div>', '</div>') 從右向左掃描:
> —— 在清單 </div> 中(包含 >),移除。v —— 在清單中,移除。i —— 在清單中,移除。d —— 在清單中,移除。/ —— 在清單中,移除。< —— 在清單中,移除。> —— 在清單中,移除。p —— 不在清單中,停止。結果剩下 <p。
若要移除確切尾綴,請用 substr 或正則:
$str = '<p></div>';
$suffix = '</div>';
if (substr($str, -strlen($suffix)) === $suffix) {
$str = substr($str, 0, -strlen($suffix));
}
echo $str; // <p>
trim 系列函式的 $charlist 是獨立字元集合,順序無關。substr、strpos、preg_replace 或 PHP 8.0+ 的 str_starts_with/str_ends_with。