想要過濾掉換行等字元, 最常用的就是 trim(), trim() 預設會過濾掉於 "此字串前後" 的 下述字元:
- " " (ASCII 32 (0x20)), an ordinary space. (空白)
- "\t" (ASCII 9 (0x09)), a tab.
- "\n" (ASCII 10 (0x0A)), a new line (line feed). (換行)
- "\r" (ASCII 13 (0x0D)), a carriage return.
- "\0" (ASCII 0 (0x00)), the NUL-byte.
- "\x0B" (ASCII 11 (0x0B)), a vertical tab.
PHP trim() 濾掉重複的字元
除了過濾換行、空白.. 等字元外, 還可以指定要過濾的字元, 指定範圍等~ 例如:
- trim($foo, '.com');
- trim($binary, "\x00..\x1F");
使用 rtrim() 遇到的問題
使用 rtrim() 遇到下述問題, 這個是使用上沒看清楚 rtrim() 的說明, 以為 rtrim() 會是過濾掉最後面的字串, 實際上 trim() 做的比預想中的還多~
註1: rtrim() 類同 trim(), 差異在 rtrim() 只有過濾字串最後面的文字.
註2: 下述範例是想把字串最後面的 ".com" 過濾掉, 前二行是遇到的問題, 最下面兩行是把過濾 .com 的拆成兩個步驟來解決.
<?php $domain = 'abc.com'; echo rtrim($domain, '.com'); // ab $domain = 'abc.com'; $tmp = rtrim($domain, 'com'); // $tmp = abc. echo rtrim($tmp, '.'); // abc ?>
使用 trim() 注意事項
但是 trim() 使用上, 要注意的事情是: php trim 會把 指定的字串, 分割成一個一個字元, 分別過濾掉, 而不是過濾掉 "指定字串".
ex: php trim 會把 .com 變成一個一個字元('.', 'c', 'o', 'm'), 分別過濾掉, 而不是過濾掉 ".com".
所以使用 trim() 要注意下述的事情:
<?php echo trim('ccmocm.abc.cccmocm', 'com'); // .abc. echo trim('abc', 'bad'); // c (ab 被濾掉了, 沒有 full match 也會過濾掉) ?>