| 系統 | 換行符 | ASCII 碼 |
|---|---|---|
| Windows | \r\n (CRLF) | 13, 10 |
| Linux/Unix/macOS | \n (LF) | 10 |
| Mac OS 9 及更早 | \r (CR) | 13 |
// 方法一:str_replace 陣列替換(推薦,性能最好)
$str = str_replace(["\r\n", "\r", "\n"], '', $str);
// 方法二:正則替換
$str = preg_replace('/\s*/', '', $str); // 同時移除空白字符,謹慎使用
// 方法三:使用 PHP_EOL 常量(僅移除當前系統換行符,跨平台不完全)
$str = str_replace(PHP_EOL, '', $str);
// nl2br() 在 \n、\r\n、\r 前插入
echo nl2br($content);
// 若需統一為 \n 再轉換
$content = str_replace(["\r\n", "\r"], "\n", $content);
echo nl2br($content);
$content = str_replace(["\r\n", "\r"], "\n", $_POST['content']);
function get_crlf() {
$ua = $_SERVER['HTTP_USER_AGENT'];
if (stripos($ua, 'Win') !== false) return "\r\n";
if (stripos($ua, 'Mac') !== false) return "\r"; // 老 Mac
return "\n"; // Linux/Unix/現代 Mac
}
注意:現代瀏覽器提交表單時通常已統一轉為 \n,服務端無需依賴 UA 判斷。
<?php
$content = empty($_POST['content']) ? '' : trim($_POST['content']);
if ($content) {
// 顯示原始換行符
echo str_replace("\r", '\r', nl2br($content));
echo '
----------
';
echo str_replace("\n", '\n', nl2br($content));
}
?>
<form method="post">
<textarea name="content" cols="50" rows="10"></textarea>
<br/><input type="submit" value="提交" />
</form>
\n(LF)存入數據庫。nl2br() 輸出 HTML,或前端 CSS white-space: pre-wrap; 直接渲染換行。str_replace 性能優於 preg_replace;PHP_EOL 僅適用於當前服務器環境生成文件,不適用於處理用戶輸入。