Unicode 特殊字元是指任何屬於標準化 General_Category P (標點符號) 或 S (符號) 類別的代碼點,而「特殊字元移除工具」會精準地從貼上的文字中刪除這些代碼點,同時保留所有字母、數字、組合記號、分隔符號及空白字元。這種以類別為基礎的作法代表它能識別貨幣符號、數學運算子、箭頭、版權標記、連接標點 (例如底線)、許多表情符號,以及非拉丁文字系統所使用的標點,而無需依賴臨時編寫的 ASCII 清單。最多可在本機瀏覽器中處理 1,000,000 個 UTF-16 代碼單元,因此不會上傳、儲存或傳送任何資料到伺服器。由於比對是依據標準而非視覺外觀,這個工具不會從字形的樣貌來猜測 —— 一個看起來像標點但被歸類為字母的字形會保留,而一個看起來像字母但被歸類為符號的字形則會被移除。已移除代碼點的精確數量會與清理後的輸出一起顯示,讓您能夠驗證處理前後的數量。

Unicode 中「特殊字元」的定義
大多數「移除特殊字元」工具都內建一份手動維護的黑名單:$、@、#、?,可能還有十幾個其他字元。這對 ASCII 來說沒問題,但幾乎會錯過 Unicode 用相同概念涵蓋的所有內容。「特殊字元移除工具」完全不使用黑名單 —— 它直接詢問 Unicode 哪些代碼點屬於標點符號與符號類別,並且只移除這些代碼點。根據 Unicode 聯盟的 General_Category Values 規範,每個代碼點都帶有一個主要類別,例如字母、數字、記號、標點符號、符號、分隔符號或其他,而其中許多類別還會進一步細分子類別。
其中兩個子類別對於清理文字檔案特別重要:
- P (標點符號) 涵蓋一般標點,例如逗號、句號、驚嘆號、問號、分號、冒號、引號,以及類破折號字元。它也包含連接標點,例如底線。
- S (符號) 涵蓋貨幣符號 ($ ¥ € £)、數學運算子 (+ − × ÷ =)、箭頭 (→ ← ↑ ↓)、Miscellaneous Symbols 區塊、被歸類為符號的表情符號區段,以及 © ® ™ ★ 等標記。
由於比對是依據標準,這個工具同樣涵蓋非拉丁文字系統所使用的標點與符號。CJK 全形標點、阿拉伯文問號,以及天城文的 danda 都能正確對應到對應的 Unicode 類別,無需任何人手動編寫規則。JavaScript 透過 Unicode 屬性逸出 (定義於 ECMAScript 規範) 進行比對,這也是為什麼相同的規則在所有瀏覽器中的行為完全一致。
僅符號 vs. 符號與標點:選擇正確的模式
| 模式 | 會移除 | 會保留 | 最適用於 |
|---|---|---|---|
| 符號與標點 (廣泛) | 所有 Unicode 標點符號 (P*) 與符號 (S*) 代碼點 | 字母、數字、組合記號、分隔符號、空白字元 | 產生不含標點與符號的純文字與數字字串 |
| 僅符號 | 僅 Unicode 符號 (S*) 代碼點 | 字母、數字、所有標點、組合記號、分隔符號、空白字元 | 移除表情符號、貨幣符號、數學符號、箭頭及裝飾性記號,同時保留可讀的句子文法 |
之所以提供兩種模式,是因為移除標點通常會破壞語意 —— 一個被去掉逗號、句號和問號的句子會失去結構。「僅符號」模式是處理散文和多數識別符的較安全預設;而當您真正只想要留下字母、數字和空白字元時,廣泛模式則較為合適。
舉例來說,輸入 Hi, $5! 在「僅符號」模式下會變成 Hi, 5!,因為逗號和驚嘆號屬於標點而非符號。美元符號在 Unicode 中是貨幣符號,因此會被移除。在廣泛模式下,同樣的輸入會變成 Hi 5,連逗號和驚嘆號一併被移除。
如何安全地從文字檔案移除特殊字元
實際的工作流程包含三個明確的步驟,最後會得到一個可與原始檔案比對的驗證計數。
- 貼上要清理的文字。 將文字檔案的內容複製到 特殊字元移除工具 的輸入區域。輸入上限為 1,000,000 個 UTF-16 代碼單元;超過上限僅一個單元就會被拒絕且不會產生部分輸出,所以貼上失敗代表檔案需要先進行修剪。空白輸入也會被拒絕。
- 選擇 Unicode 符號與標點,或僅選擇符號。 若要達到最大程度的清理,請選擇廣泛模式;若需要保留逗號、句號、問號等文法符號,請選擇僅符號模式。編輯輸入或切換模式會立即清除先前的結果,因此您看到的輸出永遠對應當前的設定。
- 移除字元並驗證精確的輸出與已移除代碼點數量。 執行移除工具,並將清理後的文字與已移除代碼點數量並列檢視。該數量計算的是相符的 Unicode 代碼點,而非 UTF-16 代碼單元,這也是為什麼一個由單一輔助代碼點組成的表情符號仍計算為一。若數量看起來不正確,請切換模式後重新執行,而非手動編輯輸出。
當目的端需要進一步的標準化 —— 例如合併連續空白或去除空白行 —— 請將清理後的輸出交給 空白字元移除工具,它提供明確的模式來處理水平空白、空白行或所有空白字元。
保留與移除的內容
| 類別 | 範例字元 | 是否移除 |
|---|---|---|
| 貨幣符號 | $ ¥ € £ ₹ | 兩種模式皆會 |
| 數學運算子 | + − × ÷ = ≠ ≤ | 兩種模式皆會 |
| 箭頭 / 幾何符號 | → ← ★ ♥ ◆ | 兩種模式皆會 |
| 被歸類為符號的表情符號 | 🙂 🎉 | 兩種模式皆會 |
| 其他符號 (©, ®, ™) | © ® ™ | 兩種模式皆會 |
| 一般標點 | , . ! ? ; : | 僅廣泛模式 |
| 連接標點 | _ ‿ ⁀ | 僅廣泛模式 |
| 字母 (任何文字) | a à Ω Я あ | 永不 |
| 十進位數字 | 0 1 2 3 | 永不 |
| 組合記號 | café 上的尖音符、波浪號、變音符 | 永不 |
| 空白字元 | 空格、Tab、換行 | 永不 |
組合記號的規則最容易讓人感到意外。像 é 這樣的帶音符號,通常會儲存為基底字母 e 加上獨立的組合尖音符代碼點;移除工具會同時保留這兩部分,因此輸出仍會顯示 é,而不會塌縮成一個單純的 e。對於任何來自帶音符拉丁文、附有變音符的希臘文,或天城文複合字的分解字母也是如此。
移除工具不會插入替代空白。如果兩個字原本以逗號分隔,在廣泛模式移除後這兩個字會變得相連。這是有意為之的設計:工具無法推測您原本想要的文法,因此它完全不更動空白字元,讓您自行處理接合的問題。
限制、計數與需要注意的邊緣情況
在您信任長篇文件的輸出之前,有三個行為值得先檢查:
- 1,000,000 個 UTF-16 代碼單元的上限。 超過這個精確上限後,輸入會被拒絕,且您不會收到任何部分輸出。若檔案較大,請先使用以行為基礎的分割工具進行分割,清理各部分後再合併。
- 由序列而非單一代碼點組成的表情符號。 像 🙂 這樣的簡單表情符號是一個輔助代碼點,計算為一次移除。然而,家庭表情符號或國旗表情符號則是由多個代碼點透過零寬接合符或區域指標符號組合而成;移除工具會刪除每個相符的符號代碼點,並保留接合符與變體選擇器,因此即使相符的符號代碼點已消失,視覺形狀仍可能損壞。這個輸出並非表情符號序列的清理結果。
- 編輯輸入會清除先前的結果。 變更貼上的文字或切換模式會立即清除輸出,因此過時的輸出不會被誤認為對應目前的設定。每次編輯後請重新執行。
已移除代碼點的計數是最容易的驗證方式。若您在廣泛模式下貼上 Hi, $5! 並看到計數為 3,這正對應逗號、美元符號與驚嘆號 —— 與文件所述完全一致。
這種方法的適用情境 —— 以及不適用的情境
這個工具適用於受控的純文字清理、草擬適合做為識別符的文字、去除複製內容中的裝飾性記號,以及在後續處理前整理散文。它不是安全性清理工具。移除標記為「特殊」的字元並不會讓字串對 SQL、HTML、shell 命令、URL、檔案名稱、使用者名稱或身分驗證資料等用途變得安全,因為這些目的端都有各自的允許清單與文法規則,這是刪除過濾器無法強制執行的。請在伺服器上使用目的端專屬的允許清單來進行輸入驗證,並將此移除工具視為展示層的輔助工具,而非安全性控制。
發布前也請再次檢視清理後的結果。移除貨幣符號會改變價格的意義、移除省略號會改變句子的節奏、移除指示中的箭頭會改變方向性,而移除用於螢幕閱讀器發音的標點則會影響無障礙性。當您需要將特定符號放回時,特殊字元複製貼上 頁面可讓您依名稱找到並複製精確的代碼點。比對規則來自 Unicode 聯盟的 General_Category Values 以及 ECMAScript 的 Unicode 屬性逸出規範,這兩者結合起來,讓這個工具的行為比任何只列出某個鍵盤上出現字元的清單都更為全面且可稽核。
如需更深入的說明,請參閱 如何在 Excel 中移除字串中的標點符號。
如需更深入的說明,請參閱 如何使用經過驗證 Unicode 代碼的特殊字元。