移除文字格式工具不會解析 HTML,也不會去除標籤;HTML 原始碼會保持原樣,因此輸入中的字元 <b>literal</b> 在輸出中會以相同的角括號序列出現。這個工具刻意拒絕擔任 HTML 清理器或解析器的角色,因為接受豐富標記就意味著將其插入 contenteditable 區域、執行腳本,並讓頁面暴露在事件處理常式、連結、影像和版面配置的風險中。相反地,頁面只呈現一個原生表單控制項——一個普通的 textarea——並請瀏覽器提供剪貼簿來源所供應的任何純文字表示。如果來源應用程式在剪貼簿上同時提供豐富的 HTML 和 text/plain,textarea 只會保留 text/plain 的部分。從那時起,這個工具只做三件小事:根據一百萬個 Unicode 碼點的上限來驗證字串、將 CRLF 或單獨的 CR 行尾標準化為 LF,並將完全相同的字串呈現回來供你複製或下載為 TXT。沒有 DOM 萃取、沒有實體解碼、沒有 Markdown 轉換、沒有空白摺疊、沒有智慧引號替換、沒有 Unicode 標準化,也沒有編碼偵測。如果目標是將 HTML 當作純文字來讀取,這不是正確的工具——但當剪貼簿的純文字正好是來源應用程式所格式化的內容,而你想要原封不動地取回它時,這就是正確的工具。

does the remove text formatting tool parse html and strip tags
移除文字格式工具會解析 HTML 並去除標籤嗎?

Textarea 實際接收到的內容

原生 textarea 是使用者剪貼簿和這個工具之間的界線。當你貼上時,瀏覽器會參考來源應用程式所提供的剪貼簿資料。瀏覽器保留 text/plain 表示法,並忽略其他所有內容,包括 text/html、image/png 和任何自訂格式。從文書處理器、Google Doc、電子郵件用戶端、聊天應用程式、原始碼編輯器或純文字檔案複製的內容,都會匯入為同一種輸入:一串 Unicode 碼點,帶有來源應用程式所選擇的換行符號。

這個工具絕不會將此字串放入 contenteditable 元素中,絕不會建立 DocumentFragment,絕不會使用 DOMParser 進行解析,也絕不會指派給 innerHTML。這項單一的架構決策正是讓頁面對其限制保持誠實的原因。它無法意外地呈現 <script> 標籤,因為從一開始就沒有任何標籤被辨識為標籤——結尾字元 </script> 只是坐在 JavaScript 字串中的六個 Unicode 碼點。同樣的道理也適用於屬性語法、實體參考、內聯事件處理常式、嵌入的 <style> 區塊和內聯 SVG。它們全部以文字形式抵達,也全部以文字形式保留。

輸入中的字面 HTML 會如何處理

由於 textarea 存放的是純字串,因此字元 <、>、/ 以及組成類似標籤序列的字母並沒有特殊意義。貼上字面原始碼 <div class="note">Hello <em>world</em></div>,結果面板、剪貼簿承載的內容以及下載的 TXT 檔案會以相同的順序、相同的空格和換行,完整包含那些位元組。這個工具不會將 <em> 解讀為強調,不會從標記中抽出 world,也不會將 &amp; 解碼為 &。

這種保留是有意為之的,因為靜默地改寫或移除字面的標籤字元會誤導任何貼上原始碼、HTML 電子郵件內容、CMS 範本片段、文件程式碼片段或將標籤當文字引用的論壇文章的人。權衡是不含糊的:如果你只想要可見的文字,你需要在貼上之前進行真正的 HTML 轉文字步驟;如果你想要保留字面原始碼,這個工具就是正確的去處。

為什麼這個工具不參與 HTML 解析

在本機解析任意 HTML 比看起來要困難。瀏覽器會容許格式錯誤的標記、損壞的實體、混合大小寫、嵌入的 SVG 和內聯樣式,而天真的 regex 處理可能會損壞含有 > 的屬性值、錯誤處理 CDATA 區段,或去除使用者想要保留的程式碼範例中的角括號。基於 DOM 的萃取器必須選擇什麼算內容、什麼算外殼,而這個決定會以使用者無法輕易預覽的方式改變輸出。

透過完全不參與解析,這個工具消除了這些選擇。每個接受的字元都會原封不動往返,預覽等於複製,複製等於下載的檔案,檔案等於 Blob 的位元組。確定性的合約——相同的輸入字串、相同的輸出字串、只標準化行尾——就是整個產品。權衡在於這個工具永遠無法提供 HTML 文件中的散文,並且這個合約刻意宣示該限制,而不是用啟發式的剝離來掩飾它。

如何去除其他樣式並保留字元

當你想要從有樣式的來源取得未格式化的文字,而且你不希望任何標記字元被移除時,這是實際的操作順序:

  1. 使用一般的鍵盤快速鍵從來源應用程式複製有樣式的文字,確認來源在提供任何豐富格式的同時也提供了 text/plain 的剪貼簿表示。
  2. 開啟 移除文字格式 工具,點擊進入原生 textarea,並使用相同的快速鍵貼上。
  3. 在 textarea 中讀取來源所提供的預覽。如果換行符號、列表標記、表格分隔線或尾隨空白看起來有誤,修復方法在於來源應用程式——這個工具不會改寫剪貼簿所交給它的內容。
  4. 觸發純文字建立步驟。頁面會驗證字串、拒絕空白或格式錯誤的 Unicode 輸入、拒絕任何超過一百萬個碼點的內容,並將 CRLF 或單獨的 CR 替換為 LF。
  5. 檢查結果面板。Tab、重複的空格、空白行、標點符號、表情符號、帶有變音符號的字母和其他文字應該保持不變;字面的 <tag> 序列應該仍然讀作字面文字。
  6. 透過標準的 Clipboard writeText 路徑複製結果——成功訊息只有在瀏覽器確認寫入完成後才會出現——或下載 UTF-8 純文字檔案,該檔案使用 text/plain;charset=utf-8 媒體類型,檔名為 plain-text.txt。

何時你需要改用其他工具

關鍵字問題——這個工具是否會解析 HTML 並去除標籤——無論你從哪種有樣式的來源開始,答案都相同:不會。但正確的工具取決於你最終實際想要的內容。

輸入包含 移除文字格式輸出 真正的 HTML 轉文字解析器會
字面 <b>literal</b> 原始碼 相同的 <b>literal</b> 字元 僅輸出 literal
&amp; 實體參考 相同的 &amp; 字元 解碼為 &
<script>alert(1)</script> 相同的 25 個字元 移除或跳脫標籤
來自文書處理器的純散文 相同的純散文 相同的純散文

如果目標是將 HTML 當作散文來讀取,下一步是使用真正的 HTML 轉文字萃取器,或參考安全地從文字檔案中移除特殊字元的指南。改用解析器而非這個工具的常見原因包括:從網頁原始碼中抽取句子、在貼入支援單之前去除電子郵件 HTML 內文中的標籤、將 CMS 匯出的標記轉換為試算表儲存格,或清理以豐富 HTML 形式抵達的聊天訊息。如果目標相反——保留字面 HTML 原始碼的完整性,同時擺脫來源應用程式本身的字型、顏色、標題和連結樣式——這個工具正好合適,因為剪貼簿的 text/plain 表示法本質上就不帶任何樣式。

當工作更具體時,你也可以使用相關的移除工具:刪除重複的字詞、刪除空白行、摺疊 tab,或修剪尾隨空白——這些都是這個工具刻意拒絕執行的工作,而每一項在同一類別中都有專門的替代方案。

如果你正在權衡各種選項,在不掉字的情況下線上移除文字變音符號對此有詳細說明。