跨平台資料交換時,Windows (\r\n)、Linux/Unix (\n)、舊版 Mac (\r) 的換行符不一致,會導致字串比對失敗、資料庫儲存異常、前端顯示錯亂。統一移除或轉換換行符是後端處理的基本功。
$content = str_replace("\n", "", $content); // 僅移除 LF
$content = str_replace("\r\n", "", $str); // 僅移除 CRLF
缺點:無法一次處理多種格式,跨平台資料易遺漏。
$content = preg_replace("/\s/", "", $content); // 移除所有空白字元(含空格、Tab、換行)
缺點:過度清理,連正常空格也會被移除,導致單詞黏連。
$str = str_replace(PHP_EOL, '', $str);
優點:PHP 內建常數,自動對應執行環境的換行符(Windows 下為 \r\n,Linux/Mac 下為 \n),程式碼可攜性最強。
若不確定資料來源平台,可用陣列一次替換:
$str = str_replace(["\r\n", "\r", "\n"], '', $str);
或正則精準匹配換行符(保留空格):
$str = preg_replace('/\r\n|\r|\n/', '', $str);
| 轉義字元 | 名稱 | Windows | Linux/Unix | Mac (OS 9 以前) |
|---|---|---|---|---|
\n | Line Feed (LF) | 換行 + 歸行首 | 僅換行 | 不作換行 |
\r | Carriage Return (CR) | 歸行首 | 歸行首 | 換行 + 歸行首 |
\t | Tab | 跳格(移至下一欄) | ||
<?php
// 讀取檔案內容
$raw = file_get_contents('data.csv');
// 統一轉為 LF 再按行分割
$lines = preg_split('/\r\n|\r|\n/', $raw);
// 或直接移除所有換行符
$clean = str_replace(["\r\n", "\r", "\n"], ' ', $raw);
?>
str_replace("\n", '') 效能最好。PHP_EOL 或陣列替換 ["\r\n","\r","\n"]。<br>(nl2br())而非直接移除。