以空行分隔的純文字會透過為每個區塊輸出一個 p 元素、逸出 &、< 和 > 字元,並讓開發者在 br 標籤和一般空格之間選擇單行換行的處理方式,進而成為安全的 HTML。Text to HTML Paragraphs Converter 正是如此運作:它會統一 Windows 和傳統 Mac 的換行格式、修剪每一行、以一個或多個空行分隔輸入,並為 HTML 文字內容逸出文字。在 br 模式下,區塊內的換行會保留為字面上的 br 標籤,後面接著原始換行;在 space 模式下,各行則會以單一一般空格連接。輸出會以原始碼形式顯示,並以片段形式複製,絕不會以渲染後的 DOM 形式呈現,因此在轉換器自身的 UI 中,貼上的腳本無法執行。轉換和剪貼簿存取都在本機進行,輸入和輸出不會上傳,而 500,000 字元的輸入上限可讓工作保持在目前的分頁中。這種具確定性且在瀏覽器內運作的行為,就是任何搜尋 text to HTML paragraphs API 替代方案的人所得到的務實答案。

本機轉換器與 API 不同的做法
當開發人員搜尋 text to HTML paragraphs API 替代方案時,他們通常是想解決以下三個問題之一:不想為一個微不足道的轉換加上伺服器來回、想要能逐字元檢視的具確定性輸出,或是想要確認貼上的角括號不會被解讀為標記。這個轉換器無需網路呼叫就能解決這三個問題。不需要安裝 SDK、不需要管理 API 金鑰、不需要配額限制,也不需要輪詢非同步作業。轉換會在頁面中執行,並產生一個片段,其原始碼可在複製前先行閱讀。這正是與託管端點的核心差異:逸出規則和段落規則在輸出中清晰可見,而不是隱藏在必須來回傳遞到其他工具才能驗證的 JSON 回應結構中。
三步驟將純文字轉換為 HTML 段落
- 將純文字貼入轉換器,在應分為不同段落的區塊之間保留一個或多個空行。
- 選擇區塊內的單行換行要變成 br 標籤還是普通空格,然後執行轉換。
- 檢視以原始碼形式顯示的逸出後片段,然後將其複製到所屬的 HTML 文字內容位置。
每個以空行分隔的區塊會變成一個 p 元素。CRLF 和 CR 換行在分組前會統一為單一換行,輸入的前後空白會被移除,每一行會單獨修剪,一個或多個空行分隔線會合併為單一段落邊界。你可以透過貼上空行分隔的文字來驗證這一點,並看到轉換器為每個區塊輸出一個 p 元素,並套用文件所記載的逸出和換行規則,全程無需網路呼叫,也不會產生可能執行嵌入腳本的任何預覽。
逸出規則實際涵蓋的範圍
文字內容逸出比完整的 HTML 逸出範圍更窄,轉換器刻意採用較窄的規則。在 HTML 文位元組點中,能改變意義的三個字元是 &、< 和 >。轉換器在加入任何標籤之前,會將它們改寫為 &、< 和 >,這足以防止貼上的 < 和 > 被解析為元素的開頭。雙引號和單引號刻意不會被逸出,因為輸出並非放置在屬性內,而引號在文位元組點中並不會改變意義。逸出它們只會在每個段落中增加實體雜訊,卻不會改變瀏覽器解讀結果的方式,WHATWG 段落元素參考資料透過描述 p 為一個不會重新解析自身文字的 phrasing-content 容器,證實了這一事實。
br 模式 vs 空格模式:何時該選擇哪一種
在兩種換行模式之間做選擇,是最常改變渲染輸出的決定,因此值得為它單獨製作一張表格。這兩種模式並非同一件事的風格變化;它們反映了對於區塊內的單行換行是否承載意義的兩種不同假設。
| 模式 | 單行換行會發生什麼事 | 最適用於 |
|---|---|---|
| br | 保留為字面上的 br 標籤,後面接著原始換行 | 地址、簽名、詩句、歌詞、食譜步驟,以及任何換行本身具有意義之處 |
| Space | 以單一普通空格字元連接 | 在文字編輯器中自動換行的散文、長程式碼註解,以及在固定寬度來源中撰寫、其換行只是偶然的段落 |
如果你的輸入是在文字編輯器中以 80 欄寬自動換行,br 模式將在瀏覽器中產生階梯狀的版面。如果你的輸入是一個地址、其中每一行都是一行真正的內容,space 模式會把這個地址壓縮成一行連續文字。選擇取決於來源中的換行是結構性的還是偶然的。
大小限制、換行格式與邊界情況
目前的輸入上限是 500,000 字元,這能讓轉換保持在目前分頁中,而不會凍結頁面。轉換器在分隔之前,會將 CRLF 和 CR 換行統一為單一換行,因此從 Windows 記事本貼上的文件和儲存在 Unix 系統上的文件會產生相同的分組。整體輸入的前後空白會被去除,每一行會單獨修剪,而空輸入會在轉換執行前被拒絕。一個或多個空行分隔線會合併為單一段落邊界,因此習慣在文字編輯器中為段落雙倍空行的作者,不會得到一個多餘的空 p。具確定性的測試組涵蓋了保留文字字元、引號保留、空行段落邊界、br 插入、空格連接、CRLF 統一以及空輸入拒絕,這表示上述規則也就是轉換器將套用到你輸入上的規則。
來源中的標題、清單和其他語法
這個轉換器刻意不是 Markdown 解析器、不是所見即所得編輯器、不是 HTML 清理器,也不是文件匯入工具。標題、清單、強調標記、連結、表格、縮排、定位字元和引用區塊,全部都會被視為文字。如果來源已經包含可信的語意標記,將其透過此轉換器進行逸出,就不適合這個工作,你應該使用為該格式設計的解析器。如果來源是不可信的 HTML,逸出它會比嘗試用臨時的規則運算式清理更安全,但你仍然需要一個能理解 HTML 文法的清理器。
輸出可以安全貼上的位置,以及不安全的位置
複製的片段僅針對 HTML 文字內容進行逸出。它可以安全地貼到模板的內容主體、CMS 的原始碼檢視、靜態頁面的程式碼編輯器、會輸出 HTML 的電子郵件工作流程,或測試使用的 fixture 檔案中。它不能安全地貼到 HTML 屬性(例如 title 或 alt)中、JavaScript 字串字面值中、CSS 規則中、URL 中,或沒有該語言自身針對特定情境之逸出機制的模板語言中。p 和 br 標籤在屬性內部會以可見文字呈現,而從來源帶過來的、未逸出的引號或角括號,可能會破壞該屬性或周圍的字串。如果你的目的地不是 HTML 文字內容,請在貼上之前,將結果透過該目的地的逸出函式處理。
為什麼輸出永遠以原始碼形式顯示
這個轉換器從不將產生的片段以 innerHTML 插入到自己的頁面中,也不會將其預覽為可執行的 DOM。輸出保持為可見文字。這是一個刻意的安全選擇:如果輸入包含一個 script 標籤,轉換器自己的頁面就會成為貼上的 JavaScript 可能執行的地方。將輸出保持為原始碼,意味著產生的標記唯一能影響頁面的地方,是你複製它所到的目的地,而那個目的地由你掌控。所輸出的 br 語法遵循 MDN br 元素參考資料,其中記載 br 是一個用於在文字中產生換行的 void 元素,而圍繞它的段落分組則遵循先前連結的 WHATWG p 規範。這個結果沒有 doctype、html、head 或 body 包裹,因為轉換器輸出的是片段而非文件,你在目的地也應該這樣看待它。
延伸閱讀:Create Deterministic CSS Stripes Without an API。
延伸閱讀:How to Safely Convert CSV to HTML Table in Your Browser。