Bộ phát hiện ký tự vô hình

Chỉ cần dán bất kỳ đoạn văn bản nào vào công cụ này, hệ thống sẽ tự động phát hiện tất cả các ký tự vô hình có trong đó: khoảng trắng rộng bằng không, dấu chỉ hướng, ký hiệu BOM, dấu gạch nối mềm, khoảng trắng không đứt đoạn, cũng như nhóm các mã kiểm soát Unicode trông giống như không khí trống nhưng lại làm gián đoạn quá trình tìm kiếm, so sánh và sao chép-dán. Mỗi kết quả phát hiện đều đi kèm điểm mã (U+200B), tên chính thức trong Unicode và vị trí tương ứng trong chuỗi văn bản, giúp bạn xác định chính xác vị trí của lỗi bí ẩn trước khi khắc phục nó.

Cách phát hiện các ký tự vô hình

  1. 1

    Dán văn bản

    Nhập đoạn mã đáng ngờ, một đoạn mã ngắn, một thông điệp được sao chép hoặc một giá trị cấu hình.

  2. 2

    Thực hiện quét

    Công cụ sẽ duyệt từng ký tự trong mã và đánh dấu những ký tự trùng khớp với danh sách các ký tự vô hình hoặc định dạng.

  3. 3

    Xem lại báo cáo

    Mỗi ký tự được hiển thị với vị trí của nó (được đánh số từ 1), mã ký tự theo định dạng `U+HHHH` và tên Unicode tương ứng (ví dụ: khoảng trắng rộng bằng không, BOM, v.v.).

  4. 4

    Chức năng làm sạch văn bản

    Hãy sử dụng thao tác thay thế để loại bỏ hoặc hiển thị các ký tự ẩn, sau đó dán lại phiên bản đã được xử lý.

Các ký tự vô hình và nguồn gốc của chúng

Những ký tự này tồn tại vì những lý do hợp lý (cấu trúc văn bản, hướng viết ký tự, việc kết hợp các ký tự). Chúng sẽ trở thành lỗi khi thoát ra khỏi bối cảnh được thiết kế và xuất hiện trong mã nguồn, tệp cấu hình, truy vấn tìm kiếm hoặc tên người dùng.

Các ký tự mà bộ phát hiện tìm kiếm

Mã điểm Tên Nơi thường xuyên xuất hiện ẩn giấu
U+200B Khoảng trắng rộng bằng không Các trình soạn thảo văn bản phong phú, phần mềm xử lý văn bản
U+200C Không có đường nối ở độ rộng bằng không Phông chữ Ba Tư và Hindi
U+200D Bộ nối độ rộng bằng không Chuỗi emoji, các hệ chữ Ấn (Indic)
U+200E Dấu phân cách từ trái sang phải Văn bản chứa cả kiểu viết LTR và RTL
U+200F Dấu phân cách từ phải sang trái Cùng một giá trị
U+202A..E Nhúng / thay thế Tương tự; đôi khi được sử dụng một cách độc hại (nguồn mã Trojan)
U+2028 Ký hiệu phân cách dòng Sao chép từ Word, có thể làm gián đoạn các bộ mã hóa JSON
U+2029 Ký hiệu phân đoạn đoạn văn Cùng một giá trị
U+FEFF Dấu hiệu thứ tự byte Các tệp được lưu dưới định dạng UTF-8 kèm BOM trong Notepad
U+00A0 Khoảng trắng không bị đứt Khoảng trắng kiểu chữ từ Word
U+00AD Dấu gạch nối mềm Các gợi ý về việc thêm dấu gạch nối trong văn bản phong phú

Các triệu chứng phổ biến của lỗi ký tự ẩn

  • Phép so sánh chuỗi mà “lẽ ra” phải bằng nhau lại không bằng nhau. Hãy sao chép các giá trị vào công cụ này và kiểm tra số lượng byte.
  • Một biểu thức chính quy (regex) trông có vẻ khớp bằng mắt thường nhưng lại thất bại trong mã nguồn. Thường là một ký tự U+00A0 giả dạng khoảng trắng.
  • Trình phân tích JSON gặp sự cố với một payload được dán vào. Thường là một BOM ở đầu, hoặc U+2028 trong một chuỗi ký tự mà JavaScript từ chối bên trong JSON.
  • Tiêu đề SEO có độ dài không đúng. Khoảng trắng rộng bằng không khiến tiêu đề vượt quá giới hạn mà không gây ra bất kỳ thay đổi nào rõ ràng.

Góc nhìn về tấn công Trojan Source

Các ký tự vượt quyền hai chiều (U+202E, U+2066…, U+2069) có thể khiến mã nguồn hiển thị theo một thứ tự nhất định nhưng lại được biên dịch theo thứ tự khác – đây là một dạng tấn công thuộc nhóm “Tấn công mã nguồn Trojana”. Khi xem xét mã từ các nhà đóng góp không đáng tin cậy, hãy chạy các bản so sánh thay đổi của họ qua công cụ phát hiện này trước khi hợp nhất.

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

Notepad và một số công cụ Windows cũ hơn mặc định sử dụng định dạng “UTF-8 kèm BOM”. Định dạng BOM (U+FEFF) phù hợp với các ứng dụng Windows, nhưng lại không tương thích với nhiều quy trình xử lý lệnh shell, các tệp PHP (trong đó BOM được hiển thị như kết quả đầu ra trước thẻ <?php) cũng như các bộ phân tích dữ liệu JSON.

Nó trông giống như một ký tự không gian thông thường trên màn hình nhưng lại hoạt động khác biệt: không cho phép chuyển dòng và không tương thích với hầu hết các biến thể regex của \s ở mọi ngôn ngữ. Ký tự này thường xuất hiện trong các đường dẫn tệp, địa chỉ email và tên người dùng được sao chép từ các nguồn văn bản phong phú.

Không phải lúc nào cũng vậy. Trong văn bản tiếng Ả Rập, tiếng Ba Tư hoặc chữ Devanagari, các thành phần nối có độ rộng bằng không và không nối đều là bắt buộc về mặt ngữ nghĩa. Trong mã nguồn, tệp cấu hình và hầu hết các văn bản tiếng Anh, hãy loại bỏ chúng một cách tự do. Đối với nội dung ngôn ngữ tự nhiên, hãy sử dụng công cụ phát hiện để kiểm tra trước khi thực hiện việc loại bỏ.

Không, phân tích chỉ được thực hiện đối với yêu cầu hiện tại; bất kỳ nội dung nào bạn dán vào cũng sẽ không được lưu trữ hay ghi nhật ký sau khi phản hồi được tạo ra.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác