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

PHP 跳脫字元 \r \n \t 深度解析:跨平台差異、歷史由來與 C 語言行為

     編輯:PHP 綜合知識

三大跳脫字元對照表

符號名稱ASCIIWindowsLinux/UnixMac OS 9-
\nLine Feed (LF)0x0A (10)換行+歸位僅換行僅換行
\rCarriage Return (CR)0x0D (13)僅歸位僅歸位換行+歸位
\tHorizontal Tab (HT)0x09 (9)移至下一欄位

關鍵規則:引號決定生效與否

  • 雙引號 "..."、Heredoc <<<EOF:跳脫字元**解析生效**。
  • 單引號 '...':跳脫字元**視為字面字元**,'\n' 就是反斜線加 n 兩個字元。

檔案換行慣例

  • Windows:\r\n (CRLF)
  • Linux/Unix/macOS:\n (LF)
  • Mac OS 9 及之前:\r (CR)

跨平台傳輸檔案時,Git/編輯器/傳輸工具常自動轉換,若未處理會出現:

  • Unix 檔在 Windows 記事本開啟 → 全變一行(缺 CR)
  • Windows 檔在 Unix 顯示 → 行尾出現 ^M(多餘 CR)

歷史由來:電傳打字機的遺產

1960 年代 Teletype Model 33 每秒打 10 字元,換行需 0.2 秒(相當於 2 字元時間)。為免丟字,工程師在每行尾加兩字元:

  • CR (Carriage Return):告訴打印頭歸位左邊界
  • LF (Line Feed):告訴滾筒捲紙一行

後來儲存空間昂貴,各系統決定只保留一個:

  • Unix 保留 LF (\n)
  • Windows 保留 CR+LF (\r\n)
  • Mac 保留 CR (\r)

C 語言實測(Windows 環境)

#include <iostream>
int main() {
    std::cout << "hahaha" << "\r" << "xixi"; // 輸出:xixi(hahaha 被覆蓋)
    std::cout << "hahaha" << "\n" << "xixi"; // 輸出:hahaha\nxixi
}
  • \r 只移動游標至行首,**不換行**,後續輸出覆蓋前內容。
  • \n 在 Windows C 執行期庫會自動轉為 \r\n,故表現為換行+歸位。

PHP 實務建議

  1. 輸出 HTML 時用 nl2br() 或 CSS white-space: pre-wrap,勿直接輸出 \n。
  2. 處理上傳文字檔:$content = str_replace(["\r\n", "\r"], "\n", $content); 統一為 LF 再處理。
  3. PHP_EOL 只代表**當前執行環境**的換行,寫入跨平台共享檔案時請**明確指定** \n 或 \r\n。
  4. csv、http header、email 必須用 \r\n(RFC 規範)。

其他常見跳脫字元

符號意義
\\反斜線本身
\$美元符號(避免變數解析)
\"雙引號
\'單引號
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved