Văn bản & công cụ hàng ngày · Bộ công cụ văn bản
Ký tự vô hình: dấu cách không ngắt, phép nối và phần cắt có độ rộng bằng 0
· Lý lịch
text-cleanup unicode xuất bản
Khảo sát các ký tự trông giống như không có gì — khoảng trắng không ngắt, khoảng trắng và dấu nối có độ rộng bằng 0, dấu thứ tự byte — chúng đến từ đâu, được tính là khoảng trắng cũng như cách tìm và xóa chúng.
Hai dòng giống hệt nhau không trùng lặp - cách một ký tự vô hình đánh bại việc khử trùng lặp và tìm kiếm
Hai dòng có thể trông giống hệt nhau trong một trình soạn thảo nhưng không thực hiện được các kiểm tra về sự bằng nhau, tìm kiếm hoặc loại bỏ trùng lặp. Một cái có thể chứa khoảng trắng U+0020 thông thường trong khi cái còn lại chứa U+00A0, một khoảng trắng không bị phá vỡ. Ký tự có độ rộng bằng 0 có thể gây ra vấn đề tương tự mà không chiếm bất kỳ chiều rộng hiển thị nào, khiến nhà xuất bản có hai nhãn dường như khớp nhau nhưng vẫn là các chuỗi riêng biệt.
Đây không chỉ đơn thuần là mỹ phẩm. Các điểm mã ẩn có thể phân chia các kích thước phân tích, đánh bại hoạt động tìm kiếm chính xác, giữ nguyên một dòng trùng lặp hoặc khiến mã nhận dạng được sao chép không được xác thực. Trước khi viết lại nội dung bằng mắt, hãy giữ một bản sao của nguồn và so sánh các chuỗi đáng ngờ một cách có hệ thống. Kết xuất hiển thị là bằng chứng về diện mạo chứ không phải bằng chứng cho thấy các chuỗi Unicode cơ bản của chúng khớp với nhau.
Họ đến từ đâu - trang web, trình xử lý văn bản, chuỗi biểu tượng cảm xúc và sao chép-dán từ tệp PDF
Những nhân vật vô hình thường đến thông qua công việc bình thường. Các trang web sử dụng khoảng trắng không ngắt để giữ các thuật ngữ lại với nhau, trình xử lý văn bản giữ nguyên khoảng cách theo định hướng bố cục và trích xuất PDF sẽ tái tạo lại văn bản từ các ký tự được định vị. Việc sao chép giữa các hệ thống đó có thể mang các ký tự định dạng vào trường CMS ngay cả khi đích đến chỉ hiển thị các từ và khoảng trống quen thuộc.
Các dấu hiệu vô hình khác là những phần có chủ ý của hệ thống chữ viết hoặc biểu tượng cảm xúc. Trình nối có độ rộng bằng 0 có thể kết hợp các thành phần biểu tượng cảm xúc thành một biểu tượng được hiển thị, trong khi trình nối và trình nối không ảnh hưởng đến việc định hình trong một số tập lệnh. Nguồn gốc đó rất quan trọng: “không thể nhìn thấy nó” không có nghĩa là “an toàn để xóa”. Quá trình dọn dẹp nên nhắm mục tiêu đến thành phần lạ được chẩn đoán, chứ không phải mọi ký tự có độ rộng nâng cao bằng 0.
Họ khoảng trắng — các không gian thông thường, không bị phá vỡ, hẹp và mang tính biểu tượng, và những gì phần cắt của JavaScript coi là khoảng trắng
Unicode chứa nhiều hơn không gian hàng ngày. U+00A0 là không gian không phá vỡ, U+202F là không gian hẹp không phá vỡ và U+3000 là không gian tượng hình. Việc xử lý khoảng trắng JavaScript bao gồm các ký tự này, vì vậy `trim()`, `trimStart()` và `trimEnd()` có thể xóa chúng khi chúng xuất hiện ở cạnh có liên quan của chuỗi.
Việc cắt dòng của Bộ công cụ văn bản gọi các phương thức JavaScript đó trên mỗi dòng. Nó không bình thường hóa khoảng cách bên trong, vì vậy khoảng cách không bị ngắt giữa hai từ vẫn còn đó. Thống kê “ký tự không có dấu cách” sẽ xóa các ký tự khớp với JavaScript `s`, rộng hơn ASCII dấu cách. Sử dụng con số đó như một phép đo xác định chứ không phải như một lời hứa rằng mọi điểm mã vô hình đều bị loại trừ.
Họ độ rộng bằng 0 - không gian có độ rộng bằng 0, trình nối và không nối, trình nối từ và dấu thứ tự byte, hoàn toàn không phải là khoảng trắng
Họ chiều rộng bằng 0 tuân theo các quy tắc khác nhau. Không gian có độ rộng bằng 0 U+200B, trình nối không có độ rộng bằng 0 U+200C, trình nối có độ rộng bằng 0 U+200D và trình nối từ U+2060 là các ký tự định dạng thay vì khoảng trắng JavaScript. Do đó `trim()` thông thường sẽ không xóa chúng. Dòng chứa một trong những dấu này không phải là dòng trống chỉ vì màn hình không hiển thị mực.
U+FEFF có hai lịch sử liên quan: ở đầu dữ liệu được mã hóa, nó có thể báo hiệu dấu thứ tự byte, trong khi ở dạng văn bản, nó đóng vai trò là khoảng trắng không ngắt có độ rộng bằng 0. ECMAScript bao gồm U+FEFF trong bộ khoảng trắng cắt của nó, không giống như U+200B đến U+200D. Do đó, việc coi toàn bộ họ có độ rộng bằng 0 là một loại khoảng trắng sẽ mâu thuẫn với hành vi JavaScript thực tế.
Phát hiện chúng - sử dụng bộ đếm ký tự để phát hiện số lượng không khớp với những gì bạn nhìn thấy, hãy nhớ rằng một số người tham gia gắn liền với hàng xóm và ẩn giấu
Một con số đáng ngạc nhiên có thể cảnh báo bạn về nội dung ẩn nhưng nó không thể xác định được mọi trường hợp. ToolAcre đếm các cụm đồ thị có `Intl.Segmenter` khi có sẵn. Trình kết nối tham gia vào chuỗi biểu tượng cảm xúc có thể giúp một số điểm mã tạo thành một biểu đồ, do đó, việc thêm hoặc xóa nó có thể thay đổi kết xuất mà không tạo ra mức tăng một ký tự đơn giản mà bộ đếm điểm mã sẽ hiển thị.
Sử dụng nhiều manh mối cùng nhau: kết quả khớp chính xác không thành công, kết quả "không có dấu cách" không mong muốn, văn bản sao chép được kiểm tra trong trình chỉnh sửa nhận biết Unicode hoặc tìm kiếm biểu thức chính quy cho các điểm mã cụ thể. Bộ đếm dự phòng sử dụng các điểm mã khi Trình phân đoạn không khả dụng, do đó, kết quả cũng có thể khác nhau tùy theo khả năng của trình duyệt. Việc đếm thu hẹp cuộc điều tra; nó không phải là máy quét ký tự ẩn hoặc trình xem tên Unicode.
Phát hiện các ký tự ẩn: số lượng cung cấp manh mối, không phải kho đồ đầy đủ
Đối với một tạo phẩm sao chép và dán đã được xác nhận, hãy làm việc trên một bản sao và mở Tìm và thay thế ở chế độ biểu thức chính quy. Tìm kiếm `[]` và thay thế bằng không có gì sẽ xóa các khoảng trắng có độ rộng bằng 0 và các ký tự U+FEFF được nhúng trong toàn bộ văn bản. Công cụ này biên dịch mẫu bằng cờ chung của JavaScript, báo cáo số lượng thay thế và giữ nguyên văn bản nếu mẫu không hợp lệ.
Không tự động mở rộng mẫu đó thành `[-]`. Phạm vi này cũng loại bỏ U+200C và U+200D, có thể thay đổi hình dạng chữ viết và chia biểu tượng cảm xúc đã nối thành các biểu tượng riêng biệt. Chỉ thêm các điểm mã đó khi quá trình kiểm tra chứng minh rằng chúng không được mong muốn. Sau khi thay thế, hãy chạy loại bỏ trùng lặp và so sánh kết quả đầu ra với bản gốc được bảo quản trước khi xuất bản.
Ví dụ đã hoạt động: chỉ xóa các ký tự có độ rộng bằng 0 không mong muốn đã được xác nhận trước khi sao chép
Việc dọn dẹp này không giải quyết các ký tự điều khiển hai chiều, chữ đồng âm hoặc mọi vấn đề bảo mật liên quan đến văn bản khó hiểu. Các dấu hiệu định hướng có thể thay đổi thứ tự hình ảnh, trong khi các cuộc tấn công bằng hình ảnh đồng âm sử dụng các ký tự hiển thị khác nhau giống nhau. Không có vấn đề nào được giải quyết bằng cách xóa dấu cách và biểu thức chính quy ký tự vô hình bừa bãi có thể làm hỏng nội dung đa ngôn ngữ hợp pháp trong khi bỏ lỡ rủi ro thực tế.
Bộ công cụ cũng không hiển thị các cờ biểu thức chính quy như chế độ Unicode hoặc nhiều dòng, đánh dấu từng trận đấu sắp tới hoặc thực hiện từng bước thay thế riêng lẻ. Thay thế tất cả hoạt động trên toàn bộ văn bản, vì vậy số lượng được báo cáo và hành động Hoàn tác là các biện pháp bảo vệ quan trọng. Đối với mã nguồn, bản sao hợp pháp hoặc tập lệnh lạ, hãy kiểm tra từng ký tự bằng công cụ Unicode chuyên dụng trước khi thực hiện chỉnh sửa hàng loạt.
Việc mang đi - vô hình không có nghĩa là vô hại; bộ đếm của Bộ công cụ văn bản và tính năng tìm và thay thế biểu thức chính quy hiển thị và xóa chúng mà không cần rời khỏi trình duyệt của bạn
Vô hình không có nghĩa là trống rỗng, có thể thay thế hoặc có hại. Khoảng trắng không ngắt là khoảng trắng có ngữ nghĩa về bố cục; các phép nối có độ rộng bằng 0 có thể mang ngữ nghĩa định hình; U+FEFF lại hoạt động khác đi khi cắt xén JavaScript. Việc dọn dẹp chính xác bắt đầu bằng việc đặt tên cho điểm mã, hiểu lý do tại sao nó có thể xuất hiện và quyết định xem đích đến có còn cần chức năng của nó hay không.
Sử dụng Bộ công cụ văn bản làm bàn làm việc phía trình duyệt được kiểm soát: số lượng có thể làm lộ ra sự khác biệt, tính năng tìm và thay thế biểu thức chính quy có thể xóa một tập hợp được xác định chính xác và việc loại bỏ trùng lặp có thể xác nhận rằng những khác biệt ẩn đã biến mất. Giữ nguyên bản gốc, tránh xóa các phần nối theo mặc định và xác minh kết quả được hiển thị. Một bản chỉnh sửa hẹp, có thể xem lại sẽ an toàn hơn việc coi tất cả Unicode không nhìn thấy được là các mảnh vụn.