Escape Sequence
Chuỗi dùng để biểu diễn ký tự đặc biệt. Dấu gạch chéo ngược theo sau bởi ký tự biểu diễn xuống dòng, tab và các ký tự điều khiển khác.
Chuỗi thoát là sự kết hợp của ký tự thoát (thường là dấu gạch chéo ngược \) theo sau bởi một hoặc nhiều ký tự, dùng để biểu diễn các ký tự đặc biệt hoặc điều khiển không thể nhập trực tiếp. Đây là khái niệm cơ bản được sử dụng ở mọi nơi xử lý văn bản, bao gồm ngôn ngữ lập trình, định dạng dữ liệu và terminal.
Các chuỗi thoát phổ biến bao gồm \n (xuống dòng), \t (tab), \\ (gạch chéo ngược), \" (ngoặc kép), và \0 (ký tự null). Thoát Unicode như \u0041 (ký tự A) và \u{1F600} (emoji 😀) cho phép chỉ định code point trực tiếp. Các ngôn ngữ họ C cũng hỗ trợ thoát bát phân (\101) và thoát thập lục phân (\x41). Sách cơ bản lập trình cung cấp tổng quan toàn diện về chuỗi thoát.
Cơ chế thoát khác nhau theo ngữ cảnh. Trong JSON, thoát ngoặc kép và gạch chéo ngược là bắt buộc, và các ký tự điều khiển (U+0000 - U+001F) cũng phải được thoát. Trong HTML, tham chiếu ký tự như < (<), & (&), và " (") đóng vai trò cơ chế thoát và cũng quan trọng để ngăn chặn tấn công XSS (Cross-Site Scripting). URL sử dụng mã hóa phần trăm như %20 (khoảng trắng).
Thoát trong biểu thức chính quy đặc biệt phức tạp. \. khớp dấu chấm theo nghĩa đen (vô hiệu hóa metacharacter), trong khi \d là chuỗi meta khớp chữ số. Khi viết biểu thức chính quy bên trong chuỗi ký tự ngôn ngữ lập trình, cả thoát của ngôn ngữ và thoát regex đều áp dụng, đôi khi yêu cầu \\\\ để biểu diễn một gạch chéo ngược duy nhất. Vấn đề "thoát kép" này là điểm đau phổ biến cho lập trình viên.
Từ góc độ bảo mật, thoát không đầy đủ dẫn đến lỗ hổng nghiêm trọng. SQL injection là kết quả của việc không thoát dấu nháy đơn, và XSS là kết quả của việc không thoát ký tự đặc biệt HTML. Khi nhúng đầu vào người dùng vào các ngữ cảnh khác (SQL, HTML, JavaScript, lệnh shell, v.v.), thoát đúng theo ngữ cảnh cụ thể là thiết yếu. Sách giới thiệu biểu thức chính quy giải thích cách sử dụng thoát thực tế.
Đối với đếm ký tự, chuỗi thoát tạo ra sự khác biệt giữa số ký tự mã nguồn và số ký tự đầu ra thực tế. \n là 2 ký tự trong mã nguồn (\ và n) nhưng được coi là 1 ký tự (xuống dòng) khi chạy. \u0041 là 6 ký tự mã nguồn nhưng đầu ra là 1 ký tự (A). Khi phân tích mã nguồn bằng công cụ đếm ký tự, hiển thị số ký tự trước hay sau khi mở rộng phụ thuộc vào mục đích sử dụng của người dùng.