HTML <textarea> 提交的資料,換行符為 \r\n (Windows)、\n (Linux/Mac)、\r (舊 Mac)。直接 explode("\r\n") 會遺漏單一 \n 的行。本文提供標準化處理流程:trim() 移除首尾空白 → preg_split() 多格式分割 → array_filter() 移除空行。
$v !== '');
print_r($lines);
/*
Array
(
[0] => 第一行內容
[1] => 第二行內容
[2] => 第三行內容
)
*/
?>
| 寫法 | 問題 |
|---|---|
explode("\r\n", $str) | 僅分割 \r\n,Linux \n 無法分割,整段變單一元素。 |
explode("\n", $str) | Windows \r\n 會殘留 \r 於行尾 ("line\r")。 |
explode(PHP_EOL, $str) | PHP_EOL 為**伺服器**作業系統換行符,非客戶端瀏覽器提交格式。 |
未 trim() 直接分割 | 首尾換行產生空元素 ['', 'line1', 'line2', '']。 |
單引號 explode('\r\n', ...) | 單引號不解析跳脫字元,字面分割字串 "\r\n"。 |
// 移除 PREG_SPLIT_NO_EMPTY,保留空行位置
$lines = preg_split('/\r\n|\r|\n/', $raw);
// 結果: ['line1', '', 'line3'] → 索引 1 為空行
// 統一轉為 \n (Unix 風格)
$normalized = preg_replace('/\r\n|\r/', "\n", $raw);
// 統一轉為 \r\n (Windows 風格)
$normalized = preg_replace('/\r\n|\n|\r/', "\r\n", $raw);
// HTML 顯示換行
echo nl2br(htmlspecialchars($normalized));
正確處理跨平台換行符是表單資料清洗的基礎功夫。採用 trim() + preg_split() + PREG_SPLIT_NO_EMPTY 組合,能穩健應對各種瀏覽器/作業系統提交的資料格式。