首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 表單輸入換行符處理:替換、轉換與跨平台最佳實踐

     編輯:PHP 相關知識

換行符基礎知識

系統換行符ASCII 碼
Windows\r\n (CRLF)13, 10
Linux/Unix/macOS\n (LF)10
Mac OS 9 及更早\r (CR)13

常見處理需求

1. 移除所有換行符(單行化)

// 方法一:str_replace 陣列替換(推薦,性能最好)
$str = str_replace(["\r\n", "\r", "\n"], '', $str);

// 方法二:正則替換
$str = preg_replace('/\s*/', '', $str); // 同時移除空白字符,謹慎使用

// 方法三:使用 PHP_EOL 常量(僅移除當前系統換行符,跨平台不完全)
$str = str_replace(PHP_EOL, '', $str);

2. 將換行符統一轉為 HTML <br> 標籤(前端顯示)

// nl2br() 在 \n、\r\n、\r 前插入 
echo nl2br($content); // 若需統一為 \n 再轉換 $content = str_replace(["\r\n", "\r"], "\n", $content); echo nl2br($content);

3. 存入數據庫前統一為 \n(LF)

$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>

最佳實踐總結

  1. 存儲層:統一轉為 \n(LF)存入數據庫。
  2. 展示層:使用 nl2br() 輸出 HTML,或前端 CSS white-space: pre-wrap; 直接渲染換行。
  3. 處理函數選擇:str_replace 性能優於 preg_replace;PHP_EOL 僅適用於當前服務器環境生成文件,不適用於處理用戶輸入。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved