Ký tự vô hình và zero-width space trong văn bản

Tìm nguyên nhân khiến hai chuỗi trông giống nhau nhưng không khớp hoặc không lọc trùng được.

7 phút đọc•Cập nhật

Trả lời nhanh: Ký tự vô hình là code point không tạo dấu hiệu rõ trên màn hình, như zero-width space U+200B hoặc non-breaking space U+00A0. Chúng có thể làm sai độ dài, tìm kiếm, đăng nhập và lọc trùng dù văn bản nhìn bình thường.

Tia quét làm lộ các ký tự Unicode vô hình trong văn bản

Các ký tự thường gặp

U+200B là zero-width space; U+200D là zero-width joiner dùng để ghép một số emoji; U+00A0 là khoảng trắng không ngắt; U+FEFF có thể là dấu BOM hoặc zero-width no-break space. Không nên xóa tất cả một cách mù quáng vì joiner có thể cần thiết để emoji hiển thị đúng.

Dấu hiệu có ký tự vô hình

Chuỗi có độ dài lớn hơn số ký tự nhìn thấy, tìm kiếm không khớp, dòng trùng không bị loại hoặc con trỏ di chuyển qua một vị trí “trống”. Dữ liệu sao chép từ PDF, website và ứng dụng chat là nguồn phổ biến.

Zero-width space nằm giữa từ

Trước

unitext[U+200B]kit

Sau

unitextkit

Cách xử lý an toàn

Kiểm tra code point trước khi xóa. Khoảng trắng không ngắt trong văn bản thông thường có thể đổi thành dấu cách; zero-width space có thể bỏ nếu không phục vụ ngắt từ; zero-width joiner nên giữ trong emoji và chữ viết cần nó. Luôn kiểm tra lại kết quả hiển thị.

Câu hỏi thường gặp

NFC có xóa zero-width space không?

Không. Chuẩn hóa Unicode không phải thao tác xóa ký tự vô hình.

Có thể xóa toàn bộ ký tự U+200D không?

Không nên. U+200D tham gia tạo emoji gia đình, nghề nghiệp và một số hệ chữ; xóa nó có thể đổi cách hiển thị.

Nguồn tham khảo