Tải ví dụ mẫu
Bảng tra cứu ký tự ẩn
| Tên | Mã | Nguy hiểm | Mục đích |
|---|---|---|---|
| Zero-Width Space | U+200B | high | Ngắt từ dài mà không thấy khoảng trắng |
| Zero-Width Non-Joiner | U+200C | high | Ngăn nối chữ trong tiếng Ả Rập/Ấn Độ |
| Zero-Width Joiner | U+200D | high | Tạo emoji ghép hoặc nối ký tự |
| Byte Order Mark | U+FEFF | medium | Đánh dấu file là UTF-8/UTF-16 |
| Soft Hyphen | U+00AD | medium | Gợi ý điểm gạch nối khi xuống dòng |
| RTL Override | U+202E | high | Ép hướng văn bản phải-sang-trái |
| Non-Breaking Space | U+00A0 | low | Ngăn xuống dòng giữa các từ |
| Line Separator | U+2028 | medium | Ký tự ngắt dòng Unicode (lỗi trong JS) |
Khi nào cần kiểm tra ký tự ẩn
URL đáng ngờ trông bình thường nhưng chuyển hướng khác — tấn công RTL override đảo ngược tên file hiển thị.
Văn bản sao chép từ PDF hoặc web thường mang ký tự định dạng ẩn làm hỏng tìm kiếm và so sánh.
Mã nguồn có khoảng trắng zero-width gây lỗi biên dịch không thể nhìn thấy bằng mắt.
Dữ liệu JSON/CSV có BOM hoặc joiner ẩn sẽ lỗi phân tích dù nội dung trông hợp lệ.
Tên người dùng và mật khẩu có ký tự ẩn có thể vượt qua bộ lọc bảo mật hoặc gây lỗi xác thực.
Ký tự ẩn Unicode là gì?
Ký tự ẩn (hidden characters) là những ký tự Unicode không có biểu diễn hình ảnh trực quan nhưng vẫn tồn tại trong văn bản. Chúng chiếm dung lượng dữ liệu, ảnh hưởng đến cách trình bày văn bản, và có thể gây ra nhiều lỗi khó phát hiện trong lập trình, xử lý dữ liệu, và bảo mật.
Unicode định nghĩa hàng trăm ký tự điều khiển và định dạng, nhưng phổ biến nhất là nhóm zero-width (khoảng trắng không chiều rộng), nhóm whitespace đặc biệt, và nhóm bidi (bidirectional) dùng cho ngôn ngữ viết từ phải sang trái.
Các loại ký tự ẩn phổ biến
1. Nhóm Zero-Width
U+200B (Zero-Width Space), U+200C (ZWNJ), và U+200D (ZWJ) là ba ký tự nguy hiểm nhất. Chúng hoàn toàn vô hình, không chiếm không gian hiển thị, nhưng thay đổi cách xử lý văn bản. ZWJ được dùng hợp lệ trong emoji ghép (gia đình, cờ quốc gia), nhưng cũng bị lạm dụng để tạo URL phishing trông giống URL thật.
2. Byte Order Mark (BOM)
U+FEFF ban đầu dùng để đánh dấu thứ tự byte trong file UTF-16. Ngày nay, BOM thường xuất hiện vô tình ở đầu file UTF-8 khi lưu bằng một số text editor trên Windows. BOM trong file JSON hoặc CSV gây lỗi parser khó hiểu vì ký tự đầu tiên của file không phải là { hay header mà là ký tự vô hình.
3. Nhóm Bidi (Bidirectional)
RTL Override (U+202E) ép văn bản hiển thị từ phải sang trái. Đây là kỹ thuật tấn công phổ biến: file invoice_fdp.exe hiển thị như invoice_exe.pdf trên nhiều hệ điều hành, lừa người dùng mở file thực thi nguy hiểm.
4. Khoảng trắng đặc biệt
Non-Breaking Space (U+00A0), En Space, Em Space, Thin Space, và Hair Space trông giống khoảng trắng thường nhưng có chiều rộng khác nhau. Chúng thường xuất hiện khi sao chép từ PDF, Word, hoặc trang web có định dạng đặc biệt. Khi so sánh chuỗi, "hello world" (dùng NBSP) khác "hello world" (dùng space thường) dù trông hoàn toàn giống nhau.
Ký tự ẩn trong bảo mật
Ký tự ẩn là vũ khí yêu thích trong các cuộc tấn công phishing và social engineering. Một số kỹ thuật phổ biến:
- Homograph attack: Kết hợp ký tự ẩn với ký tự Unicode giống chữ Latin để tạo domain giả.
- RTL override: Đảo ngược phần mở rộng file để ẩn định dạng thật (.exe thành .pdf).
- Zero-width injection: Chèn ZWSP vào username hoặc password để bypass danh sách đen.
- Watermarking: Chèn tổ hợp ký tự ẩn duy nhất vào tài liệu để theo dõi nguồn rò rỉ.
Cách phòng tránh trong lập trình
- Luôn normalize input với
String.prototype.normalize()trước khi xử lý. - Dùng regex để loại bỏ ký tự điều khiển:
/[- ]/g - Validate file BOM trước khi parse JSON/CSV — strip
ở byte đầu tiên. - Hiển thị codepoint (
U+XXXX) bên cạnh mỗi ký tự khi debug text processing. - Dùng editor có chế độ hiển thị whitespace (VS Code: Toggle Render Whitespace).
- CI/CD pipeline nên có bước kiểm tra ký tự ẩn trong source code và config files.
Câu hỏi thường gặp
Công cụ văn bản khác
Unicode Encoder and Decoder — \uXXXX U+XXXX HTML Entity UTF-8 Hex
Encode text to Unicode escape sequences (\uXXXX, U+XXXX, HTML entities, UTF-8 hex) and decode them back to readable text. Supports the full Unicode range including emoji, CJK, Vietnamese diacritics, and all scripts. Free, instant, runs entirely in your browser.
Find and Replace Text Online — Regex Search Replace Tool
Find and replace text online with regex support, case-sensitive matching, whole-word search, and highlighted matches. See match count and replace all or one at a time. Free browser-based tool for writers, developers, and data analysts.
Word Counter — Count Words Characters Sentences Paragraphs
Count words, characters (with and without spaces), sentences, paragraphs, reading time, speaking time, and top keywords in real time. Free word counter for writers, students, and SEO professionals.
Diff Checker — Compare Two Text Blocks Side by Side Online
Compare two blocks of text side by side instantly. See added lines highlighted green, deleted lines red, and unchanged lines gray. Line numbers on both sides, ignore-whitespace toggle, case-insensitive option. Free, private, runs in your browser.
JSON Validator & Formatter — Check & Fix JSON Syntax Online
Validate JSON syntax instantly and see the exact error with line and column numbers. Format (pretty-print) or minify valid JSON. Free, private, runs entirely in your browser.
Case Converter — UPPERCASE lowercase Title camelCase snake_case kebab-case
Convert text between 11 case formats: UPPERCASE, lowercase, Title Case, camelCase, PascalCase, snake_case, kebab-case, and more. Instant copy, free, no signup.
Giới thiệu về Text Tools
Công cụ văn bản xử lý công việc hàng ngày với chuỗi, đoạn văn và tài liệu: đếm từ, đảo ngược ký tự, chuyển đổi case, tạo slug, tách văn bản dài, xem trước Markdown. Những công cụ này thay thế các app desktop riêng biệt và lệnh CLI phức tạp bằng một URL bạn có thể bookmark và dùng không cần setup.
Vì sao nó quan trọng
Người viết, biên tập viên và đội content làm việc với giới hạn text khắp nơi — giới hạn 280 ký tự của Twitter, post LinkedIn 1.300 ký tự tối ưu, abstract học thuật 250 từ, meta description SEO giới hạn 155. Một word counter hiển thị ký tự (có và không dấu cách), từ, câu, đoạn và thời gian đọc cho phép bạn đạt yêu cầu nền tảng mà không chuyển đổi công cụ.
Riêng tư và an toàn
Công cụ text xử lý input hoàn toàn trong trình duyệt. Bản draft blog, hợp đồng pháp lý hay email bảo mật của bạn không bao giờ rời khỏi thiết bị. Ngay cả word counter cũng không truyền text của bạn — nó chạy một hàm đếm đơn giản cục bộ, và thực sự đó là tất cả những gì cần. Nếu một công cụ text tuyên bố 'xử lý' text của bạn trên server của họ, phạm vi rò rỉ dữ liệu rất lớn và hiếm khi được biện minh.
Thực hành tốt
- Cho SEO title, nhắm 50-60 ký tự bao gồm dấu cách (Google cắt title dài hơn)
- Meta description hoạt động tốt nhất ở 150-155 ký tự — Google hiển thị ~160 trên desktop, ~120 trên mobile
- Khi tạo slug, giữ ngắn (3-5 từ), toàn chữ thường, dấu gạch ngang không phải gạch dưới, tránh stop word
- Markdown preview hữu ích TRƯỚC khi đăng để xác minh heading, link, danh sách render đúng trên nền tảng đích