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

convert text to html paragraphs api alternative
convert text to html paragraphs api alternative

本機轉換器與 API 不同的做法

當開發人員搜尋 text to HTML paragraphs API 替代方案時,他們通常是想解決以下三個問題之一:不想為一個微不足道的轉換加上伺服器來回、想要能逐字元檢視的具確定性輸出,或是想要確認貼上的角括號不會被解讀為標記。這個轉換器無需網路呼叫就能解決這三個問題。不需要安裝 SDK、不需要管理 API 金鑰、不需要配額限制,也不需要輪詢非同步作業。轉換會在頁面中執行,並產生一個片段,其原始碼可在複製前先行閱讀。這正是與託管端點的核心差異:逸出規則和段落規則在輸出中清晰可見,而不是隱藏在必須來回傳遞到其他工具才能驗證的 JSON 回應結構中。

三步驟將純文字轉換為 HTML 段落

  1. 將純文字貼入轉換器,在應分為不同段落的區塊之間保留一個或多個空行。
  2. 選擇區塊內的單行換行要變成 br 標籤還是普通空格,然後執行轉換。
  3. 檢視以原始碼形式顯示的逸出後片段,然後將其複製到所屬的 HTML 文字內容位置。

每個以空行分隔的區塊會變成一個 p 元素。CRLF 和 CR 換行在分組前會統一為單一換行,輸入的前後空白會被移除,每一行會單獨修剪,一個或多個空行分隔線會合併為單一段落邊界。你可以透過貼上空行分隔的文字來驗證這一點,並看到轉換器為每個區塊輸出一個 p 元素,並套用文件所記載的逸出和換行規則,全程無需網路呼叫,也不會產生可能執行嵌入腳本的任何預覽。

逸出規則實際涵蓋的範圍

文字內容逸出比完整的 HTML 逸出範圍更窄,轉換器刻意採用較窄的規則。在 HTML 文位元組點中,能改變意義的三個字元是 &、< 和 >。轉換器在加入任何標籤之前,會將它們改寫為 &amp;、&lt; 和 &gt;,這足以防止貼上的 &lt; 和 &gt; 被解析為元素的開頭。雙引號和單引號刻意不會被逸出,因為輸出並非放置在屬性內,而引號在文位元組點中並不會改變意義。逸出它們只會在每個段落中增加實體雜訊,卻不會改變瀏覽器解讀結果的方式,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。