Bidirectional Text (BiDi)
Xử lý văn bản hỗn hợp từ trái sang phải (LTR) và từ phải sang trái (RTL), cần thiết cho tiếng Ả Rập và tiếng Do Thái trong nội dung đa ngôn ngữ.
Văn bản hai chiều (BiDi: Bidirectional Text) là công nghệ xử lý các tình huống mà ngôn ngữ từ trái sang phải (LTR) và ngôn ngữ từ phải sang trái (RTL) cùng tồn tại trong cùng một văn bản. Tiếng Ả Rập và tiếng Do Thái được viết RTL, và khoảng 12 ngôn ngữ trên thế giới sử dụng chữ viết RTL. Đối với các trang web phục vụ đối tượng toàn cầu, hỗ trợ BiDi là thách thức không thể tránh khỏi.
Thuật toán Hai chiều Unicode (UBA) tự động xác định hướng của mỗi ký tự trong văn bản và thiết lập thứ tự hiển thị chính xác. Mỗi ký tự Unicode được gán "hướng mạnh" (ký tự Ả Rập là RTL, ký tự Latin là LTR) hoặc "hướng yếu" (chữ số và dấu câu). Các ký tự hướng yếu thay đổi hướng dựa trên ngữ cảnh xung quanh, có thể dẫn đến các vấn đề như số điện thoại (03-1234-5678) xuất hiện theo thứ tự ngược trong văn bản RTL. Sách văn bản hai chiều Unicode giải thích cách UBA hoạt động chi tiết.
Trong HTML, thuộc tính dir="rtl" và phần tử <bdo> (Bidirectional Override) điều khiển rõ ràng hướng văn bản. Các thuộc tính CSS như direction và thuộc tính logic (margin-inline-start, padding-inline-end, v.v.) cũng rất quan trọng cho hỗ trợ BiDi. Sử dụng thuộc tính logic thay vì thuộc tính vật lý (margin-left) cho phép tự động thích ứng khi chuyển đổi giữa bố cục LTR và RTL.
Văn bản BiDi cũng đặt ra các mối lo ngại về bảo mật. Năm 2021, cuộc tấn công Trojan Source được tiết lộ, chứng minh cách các ký tự điều khiển hướng Unicode (RLO, LRI, v.v.) có thể bị khai thác để làm cho mã nguồn hiển thị khác với thứ tự thực thi thực tế. Nhiều trình soạn thảo mã và dịch vụ lưu trữ kho đã triển khai các biện pháp đối phó với lỗ hổng này. Sách khả năng truy cập web và i18n bao gồm các phương pháp tốt nhất cho BiDi.
Trong đếm ký tự, văn bản BiDi có thể gây ra sự khác biệt giữa số ký tự trực quan và số ký tự nội bộ. Các ký tự điều khiển hướng (U+200F, U+200E, v.v.) có chiều rộng bằng không và không hiển thị trên màn hình, nhưng chúng được đếm là ký tự. Để có số ký tự chính xác, bạn cần nhận biết các ký tự vô hình này và quyết định bao gồm hay loại trừ chúng khỏi phép đếm.