Mã hóa nào được ưu tiên cho các tệp HTML?

Mã hóa ký tự là một phương pháp chuyển đổi byte thành ký tự. Để xác thực hoặc hiển thị đúng tài liệu HTML, chương trình phải chọn mã hóa ký tự phù hợp

Bộ ký tự hoặc mã hóa ký tự phổ biến nhất được sử dụng trên máy tính là ASCII - Mã tiêu chuẩn của Mỹ để trao đổi thông tin và đây có lẽ là bộ ký tự được sử dụng rộng rãi nhất để mã hóa văn bản điện tử

Mã hóa ASCII chỉ hỗ trợ bảng chữ cái Latinh viết hoa và viết thường, các số 0-9 và một số ký tự phụ tạo tổng cộng 128 ký tự. Bạn có thể xem toàn bộ các ký tự ASCII có thể in được

Tuy nhiên, nhiều ngôn ngữ sử dụng ký tự Latinh có dấu hoặc bảng chữ cái hoàn toàn khác. ASCII không giải quyết các ký tự này;

Tổ chức Tiêu chuẩn Quốc tế đã tạo ra một loạt các bộ ký tự để đối phó với các ký tự quốc gia khác nhau. Đối với các tài liệu bằng tiếng Anh và hầu hết các ngôn ngữ Tây Âu khác, mã hóa được hỗ trợ rộng rãi ISO-8859-1 được sử dụng

Dưới đây là danh sách Bộ ký tự đang được sử dụng trên toàn thế giới cùng với mô tả của chúng

Sr. STT Bộ ký tự & Mô tả1

ISO-8859-1

Bảng chữ cái Latinh phần 1

Bao gồm Bắc Mỹ, Tây Âu, Mỹ Latinh, theCaribbean, Canada, Châu Phi

2

ISO-8859-2

Bảng chữ cái Latinh phần 2

Bao trùm Đông Âu

3

ISO-8859-3

Bảng chữ cái Latinh phần 3

Bao gồm Đông Nam Âu, Esperanto, linh tinh khác

4

ISO-8859-4

Bảng chữ cái Latinh phần 4

Bao gồm Scandinavia/Baltic (và những nơi khác không có trong ISO-8859-1)

5

ISO-8859-5

Bảng chữ cái Latinh/Cyrillic phần 5

6

ISO-8859-6

Bảng chữ cái Latinh/Ả Rập phần 6

7

ISO-8859-7

Bảng chữ cái Latinh/Hy Lạp phần 7

8

ISO-8859-8

Bảng chữ cái Latinh/Hebrew phần 8

9

ISO-8859-9

Bảng chữ cái Latinh 5 phần 9

Giống như ISO-8859-1 ngoại trừ các ký tự tiếng Thổ Nhĩ Kỳ thay thế các ký tự tiếng Iceland

10

ISO-8859-10

Tiếng Latinh 6 Tiếng Latinh 6 Tiếng Lappish, Bắc Âu và Eskimo

11

ISO-8859-15

Giống như ISO-8859-1 nhưng có thêm nhiều ký tự hơn

12

ISO-2022-JP

Bảng chữ cái Latinh/Nhật phần 1

13

ISO-2022-JP-2

Bảng chữ cái Latinh/Nhật phần 2

14

ISO-2022-KR

Bảng chữ cái Latinh/Hàn Quốc phần 1

Hiệp hội Unicode sau đó đã được thiết lập để nghĩ ra cách hiển thị tất cả các ký tự của các ngôn ngữ khác nhau, thay vì có các mã ký tự không tương thích khác nhau này cho các ngôn ngữ khác nhau

Do đó, nếu bạn muốn tạo tài liệu sử dụng các ký tự từ nhiều bộ ký tự, bạn sẽ có thể làm như vậy bằng cách sử dụng các mã hóa ký tự Unicode đơn lẻ

Do đó, Unicode chỉ định các mã hóa có thể xử lý một chuỗi theo những cách đặc biệt để tạo đủ khoảng trống cho bộ ký tự lớn mà nó bao gồm. Chúng được gọi là UTF8, UTF-16 và UTF-32

Sr. STT Bộ ký tự & Mô tả1

UTF-8

Định dạng dịch thuật Unicode có đơn vị 8 bit, có dạng byte. Một ký tự trong UTF8 có thể dài từ 1 đến 4 byte, làm cho chiều rộng của UTF8 thay đổi

2

UTF-16

Định dạng dịch thuật Unicode có đơn vị 16 bit, có dạng ngắn. Nó có thể dài 1 hoặc 2 quần short, làm cho chiều rộng thay đổi theo UTF16

3

UTF-32

Định dạng dịch thuật Unicode có đơn vị 32 bit, có thời lượng dài. Đây là định dạng có chiều rộng cố định và luôn dài 1 "dài"

256 ký tự đầu tiên của bộ ký tự Unicode tương ứng với 256 ký tự của ISO-8859-1

Theo mặc định, bộ xử lý HTML 4 phải hỗ trợ UTF-8 và bộ xử lý XML phải hỗ trợ UTF-8 và UTF-16;

Trong khi Ngôn ngữ đánh dấu siêu văn bản (HTML) đã được sử dụng từ năm 1991, HTML 4. 0 từ tháng 12 năm 1997 là phiên bản tiêu chuẩn hóa đầu tiên trong đó các ký tự quốc tế được xử lý hoàn chỉnh hợp lý. Khi một tài liệu HTML bao gồm các ký tự đặc biệt nằm ngoài phạm vi ASCII bảy bit, hai mục tiêu đáng được xem xét. tính toàn vẹn của thông tin và hiển thị trình duyệt chung

Chỉ định mã hóa ký tự của tài liệu[sửa]

Có hai cách chung để chỉ định mã hóa ký tự nào được sử dụng trong tài liệu

Đầu tiên, máy chủ web có thể bao gồm mã hóa ký tự hoặc "

7" trong tiêu đề Giao thức truyền siêu văn bản (HTTP) 
8, tiêu đề này thường trông như thế này. [1]

Content-Type: text/html; charset=utf-8

Phương pháp này cung cấp cho máy chủ HTTP một cách thuận tiện để thay đổi mã hóa của tài liệu theo thỏa thuận nội dung; . [2]

Thứ hai, một tuyên bố có thể được bao gồm trong chính tài liệu

Đối với HTML, có thể bao gồm thông tin này bên trong phần tử

0 ở gần đầu tài liệu. [3]

HTML5 cũng cho phép cú pháp sau có nghĩa giống hệt nhau. [3]

Tài liệu XHTML có tùy chọn thứ ba. để thể hiện mã hóa ký tự thông qua khai báo XML, như sau. [4]

Với cách tiếp cận thứ hai này, vì không thể biết mã hóa ký tự cho đến khi khai báo được phân tích cú pháp, nên có một vấn đề là biết mã hóa ký tự nào được sử dụng trong tài liệu cho đến và bao gồm cả chính khai báo đó. Nếu mã hóa ký tự là một phần mở rộng ASCII thì nội dung cho đến và bao gồm cả phần khai báo phải là ASCII thuần túy và điều này sẽ hoạt động chính xác. Đối với mã hóa ký tự không phải là phần mở rộng ASCII (i. e. không phải là tập hợp siêu của ASCII), chẳng hạn như UTF-16BE và UTF-16LE, bộ xử lý HTML, chẳng hạn như trình duyệt web, sẽ có thể phân tích cú pháp khai báo trong một số trường hợp thông qua việc sử dụng heuristic

Thuật toán phát hiện mã hóa[sửa | sửa mã nguồn]

Kể từ HTML5, bộ ký tự được đề xuất là UTF-8. [3] Một "thuật toán đánh hơi mã hóa" được xác định trong thông số kỹ thuật để xác định mã hóa ký tự của tài liệu dựa trên nhiều nguồn đầu vào, bao gồm

  1. Hướng dẫn sử dụng rõ ràng
  2. Thẻ meta rõ ràng trong 1024 byte đầu tiên của tài liệu
  3. Dấu thứ tự byte (BOM) trong ba byte đầu tiên của tài liệu
  4. Loại nội dung HTTP hoặc thông tin lớp vận chuyển khác
  5. Phân tích các byte tài liệu tìm kiếm các chuỗi hoặc phạm vi giá trị byte cụ thể,[5] và các cơ chế phát hiện dự kiến ​​khác

Các ký tự bên ngoài phạm vi ASCII có thể in được (32 đến 126) thường xuất hiện không chính xác. Điều này gây ra một số vấn đề đối với người dùng nói tiếng Anh, nhưng các ngôn ngữ khác thường xuyên—trong một số trường hợp, luôn luôn—yêu cầu các ký tự nằm ngoài phạm vi đó. Trong các môi trường ngôn ngữ tiếng Trung, tiếng Nhật và tiếng Hàn (CJK), nơi có một số mã hóa nhiều byte khác nhau được sử dụng, tính năng tự động phát hiện cũng thường được sử dụng. Cuối cùng, các trình duyệt cũng thường cho phép người dùng ghi đè nhãn bộ ký tự không chính xác theo cách thủ công

Các trang web đa ngôn ngữ và trang web bằng các ngôn ngữ không thuộc phương Tây sử dụng UTF-8 ngày càng phổ biến, cho phép sử dụng cùng một mã hóa cho tất cả các ngôn ngữ. UTF-16 hoặc UTF-32, cũng có thể được sử dụng cho tất cả các ngôn ngữ, ít được sử dụng rộng rãi hơn vì chúng có thể khó xử lý hơn trong các ngôn ngữ lập trình giả sử mã hóa siêu bộ ASCII hướng byte và chúng kém hiệu quả hơn đối với văn bản với

Việc xem thành công một trang không nhất thiết là dấu hiệu cho thấy mã hóa của trang đó được chỉ định chính xác. Nếu cả người tạo và người đọc trang đều giả định một số mã hóa ký tự dành riêng cho nền tảng và máy chủ không gửi bất kỳ thông tin nhận dạng nào, thì người đọc vẫn sẽ thấy trang như ý định của người tạo, nhưng những người đọc khác trên các nền tảng khác hoặc bằng các ngôn ngữ bản địa khác

Mã hóa được phép[sửa]

Tiêu chuẩn mã hóa WHATWG, được tham chiếu bởi các tiêu chuẩn HTML gần đây (Tiêu chuẩn sống của WHATWG HTML hiện tại, cũng như W3C HTML 5 cạnh tranh trước đây. 0 và 5. 1) chỉ định danh sách mã hóa mà trình duyệt phải hỗ trợ. Các tiêu chuẩn HTML cấm hỗ trợ các bảng mã khác. [6][7][8] Tiêu chuẩn mã hóa quy định thêm rằng các định dạng mới, giao thức mới (ngay cả khi các định dạng hiện có được sử dụng) và tác giả của các tài liệu mới được yêu cầu sử dụng riêng UTF-8. [9]

Ngoài UTF-8, các bảng mã sau được liệt kê rõ ràng trong chính tiêu chuẩn HTML, có tham chiếu đến Tiêu chuẩn mã hóa. [số 8]

  1. ^ Cũng được chỉ định cho
    1, 
    2 và các nhãn liên quan. [9]
  2. ^ Cũng được chỉ định cho
    3, 
    0 và các nhãn liên quan. [9]
  3. ^ Cũng được chỉ định cho
    1 và các nhãn liên quan. [9]
  4. ^ Được chỉ định với 0xA3A0 dưới dạng mã hóa trùng lặp của không gian chữ tượng hình (U+3000) vì lý do tương thích và như vậy loại trừ U+E5E5 (ký tự sử dụng riêng). [10][11] Ngoài ra, được chỉ định với 0x80 được chấp nhận làm mã hóa thay thế cho ký hiệu đồng euro (U+20AC; xem Windows-936). [12] Mặt khác, tuân theo các ánh xạ từ tiêu chuẩn 2005. [11]
  5. ^ Biến thể Bộ ký tự bổ sung Hồng Kông, mặc dù hầu hết các phần mở rộng HKSCS (những phần mở rộng có byte dẫn đầu nhỏ hơn 0xA1) không được bao gồm bởi bộ mã hóa, chỉ bởi bộ giải mã. [13]
  6. ^ Thông số kỹ thuật bao gồm các phần mở rộng của IBM và NEC (xem Windows-31J). [14]
  7. ^ Thông số kỹ thuật sử dụng cùng một chỉ mục như được sử dụng cho Shift JIS (trong chừng mực có thể đạt được), i. e. bao gồm các phần mở rộng NEC. Kana nửa chiều rộng được bộ mã hóa chuyển thành chiều rộng đầy đủ,[15] nhưng được bộ giải mã chấp nhận bằng cách sử dụng chuỗi thoát (ESC 0x28 0x49). [16] Shift Out và Shift In (0x0E và 0x0F) bị loại trừ hoàn toàn để ngăn chặn các cuộc tấn công. [16][17]
  8. ^ Trên thực tế là Mã Hangul Thống nhất, là một siêu bộ bao gồm toàn bộ khối Âm tiết Hangul. [18]
  9. ^ Chỉ định để giải mã; . [19]
  10. ^ Để tương thích với nội dung đã triển khai, cũng được chỉ định cho nhãn
    2 đơn giản,[20] mặc dù dấu thứ tự byte (BOM), nếu có, sẽ được ưu tiên hơn bất kỳ nhãn nào. [21] Chỉ định để giải mã; . [19]
  11. ^ Ánh xạ 0x00 đến 0x7F đến U+0000 đến U+007F và 0x80 đến 0xFF đến U+F780 đến U+F7FF (dải Vùng sử dụng riêng tư), sao cho 8 bit thấp của điểm mã luôn khớp với byte gốc. [22]

Các mã hóa bổ sung sau đây được liệt kê trong Tiêu chuẩn mã hóa và do đó cũng cần hỗ trợ cho chúng. [9]

  1. ^ Sử dụng cùng một bộ mã hóa và bộ giải mã như ISO-8859-8, nhưng không tuân theo hành vi sắp xếp trực quan được sử dụng cho các tài liệu có nhãn là ISO-8859-8. [23]
  2. ^ Có tiêu đề KOI8-U và được chỉ định cho cả hai nhãn
    3 và 
    4,[9] nhưng theo sau KOI8-RU (i. e. bao gồm Ў/ў). [24][25]
  3. ^ Cũng được chỉ định cho
    5 và các nhãn liên quan. Xử lý giống như GB 18030 cho mục đích giải mã. [26] Đối với mục đích mã hóa, việc gắn nhãn là GBK (hoặc GB 2312) không bao gồm mã bốn byte và ưu tiên biểu diễn 0x80 một byte cho U+20AC. [10]
  4. ^ Thông số kỹ thuật sử dụng cùng một chỉ mục như được sử dụng cho Shift JIS (trong chừng mực mà bộ mã EUC 1 đạt được), i. e. bao gồm các phần mở rộng NEC. JIS X 0212 chỉ được bao gồm để giải mã. [27]

Các mã hóa sau đây được liệt kê là ví dụ rõ ràng về mã hóa bị cấm. [số 8]

Tiêu chuẩn cũng xác định bộ giải mã "thay thế", ánh xạ tất cả nội dung được gắn nhãn là mã hóa nhất định cho ký tự thay thế (�), hoàn toàn từ chối xử lý nội dung đó. Điều này nhằm mục đích ngăn chặn các cuộc tấn công (e. g. tập lệnh chéo trang) có thể khai thác sự khác biệt giữa máy khách và máy chủ về mã hóa nào được hỗ trợ để che dấu nội dung độc hại. [28] Mặc dù mối quan tâm bảo mật tương tự áp dụng cho ISO-2022-JP và UTF-16, cũng cho phép các chuỗi byte ASCII được diễn giải theo cách khác, phương pháp này không được coi là khả thi đối với chúng vì chúng được sử dụng tương đối thường xuyên hơn trong triển khai . [29] Các bảng mã sau nhận được cách xử lý này. [30]

Tài liệu tham khảo nhân vật [ chỉnh sửa ]

Ngoài mã hóa ký tự gốc, các ký tự cũng có thể được mã hóa dưới dạng tham chiếu ký tự, có thể là tham chiếu ký tự số (thập phân hoặc thập lục phân) hoặc tham chiếu thực thể ký tự. Tham chiếu thực thể ký tự đôi khi cũng được gọi là thực thể được đặt tên hoặc thực thể HTML cho HTML. Việc sử dụng các tham chiếu ký tự của HTML bắt nguồn từ SGML

Tham chiếu ký tự HTML[sửa mã nguồn]

Một tham chiếu ký tự số trong HTML đề cập đến một ký tự theo điểm mã Unicode/Bộ ký tự chung của nó và sử dụng định dạng

6

hoặc là

7

trong đó nnnn là điểm mã ở dạng thập phân và hhhh là điểm mã ở dạng thập lục phân. X phải là chữ thường trong tài liệu XML. nnnn hoặc hhhh có thể là bất kỳ số chữ số nào và có thể bao gồm các số 0 đứng đầu. hhhh có thể trộn lẫn chữ hoa và chữ thường, mặc dù chữ hoa là kiểu thông thường

Không phải tất cả các trình duyệt web hoặc ứng dụng email được sử dụng bởi người nhận tài liệu HTML hoặc trình soạn thảo văn bản được tác giả của tài liệu HTML sử dụng đều có thể hiển thị tất cả các ký tự HTML. Hầu hết các phần mềm hiện đại đều có thể hiển thị hầu hết hoặc tất cả các ký tự cho ngôn ngữ của người dùng và sẽ vẽ một hộp hoặc chỉ báo rõ ràng khác cho các ký tự mà chúng không thể hiển thị

Đối với các mã từ 0 đến 127, bộ tiêu chuẩn ASCII 7 bit ban đầu, hầu hết các ký tự này có thể được sử dụng mà không cần tham chiếu ký tự. Tất cả các mã từ 160 đến 255 đều có thể được tạo bằng tên thực thể ký tự. Chỉ một số mã được đánh số cao hơn có thể được tạo bằng cách sử dụng tên thực thể, nhưng tất cả đều có thể được tạo bằng tham chiếu ký tự số thập phân

Các tham chiếu thực thể ký tự cũng có thể có định dạng

8 trong đó tên là một chuỗi chữ và số phân biệt chữ hoa chữ thường. Ví dụ: "λ" cũng có thể được mã hóa thành 
9 trong tài liệu HTML. Các tham chiếu thực thể ký tự 
0, 
1, 
2 và 
3 được xác định trước trong HTML và SGML, bởi vì 
0, 
1, 
2 và 
3 đã được sử dụng để phân định đánh dấu. Đáng chú ý là điều này không bao gồm thực thể 
8 (') của XML trước HTML5. Để biết danh sách tất cả các tham chiếu thực thể ký tự HTML đã đặt tên cùng với các phiên bản mà chúng được giới thiệu, hãy xem Danh sách tham chiếu thực thể ký tự XML và HTML

Việc sử dụng tham chiếu ký tự HTML không cần thiết có thể làm giảm đáng kể khả năng đọc HTML. Nếu mã hóa ký tự cho một trang web được chọn phù hợp, thì các tham chiếu ký tự HTML thường chỉ được yêu cầu đối với các ký tự phân tách đánh dấu như đã đề cập ở trên và đối với một vài ký tự đặc biệt (hoặc hoàn toàn không có ký tự nào nếu sử dụng mã hóa Unicode gốc như UTF-8 . Thoát thực thể HTML không chính xác cũng có thể mở ra các lỗ hổng bảo mật cho các cuộc tấn công tiêm chích, chẳng hạn như tập lệnh chéo trang. Nếu các thuộc tính HTML không được trích dẫn, một số ký tự nhất định, quan trọng nhất là khoảng trắng, chẳng hạn như dấu cách và tab, phải được thoát bằng cách sử dụng các thực thể. Các ngôn ngữ khác liên quan đến HTML có phương thức thoát ký tự riêng

Tham chiếu ký tự XML[sửa]

Không giống như HTML truyền thống với nhiều tham chiếu thực thể ký tự, trong XML chỉ có năm tham chiếu thực thể ký tự được xác định trước. Chúng được sử dụng để thoát các ký tự nhạy cảm với đánh dấu trong các ngữ cảnh nhất định. [31]

  • 3 → & (dấu và, U+0026)
  • 0 → < (nhỏ hơn dấu, U+003C)
  • 1 → > (dấu lớn hơn, U+003E)
  • 2 → " (dấu ngoặc kép, U+0022)
  • 8 → ' (dấu nháy đơn, U+0027)

Tất cả các tham chiếu thực thể ký tự khác phải được xác định trước khi chúng có thể được sử dụng. Ví dụ: việc sử dụng

74 (cung cấp é, chữ E viết thường trong tiếng Latinh có dấu rõ ràng, U+00E9 trong Unicode) trong tài liệu XML sẽ tạo ra lỗi trừ khi thực thể đã được xác định. XML cũng yêu cầu 
75 ở dạng tham chiếu số thập lục phân phải ở dạng chữ thường. ví dụ 
76 thay vì 
76. XHTML, là một ứng dụng XML, hỗ trợ tập thực thể HTML, cùng với các thực thể được xác định trước của XML

Mã hóa nào là tốt nhất cho HTML?

Lựa chọn tốt nhất của bạn. UTF-8 . Đến năm 2019, hơn 90 phần trăm tất cả các trang web sử dụng UTF-8. Nó cũng được khuyến nghị sử dụng làm mã hóa ký tự HTML mặc định bởi World Web Consortium.

Là HTML ASCII hay UTF

Mã hóa ký tự mặc định trong HTML-5 là UTF-8 .

Tại sao bạn nên mã hóa tài liệu HTML bằng UTF

Tại sao lại sử dụng UTF-8? . Bạn không thể mã hóa các phần khác nhau của tài liệu bằng các mã hóa khác nhau. Mã hóa dựa trên Unicode chẳng hạn như UTF-8 có thể hỗ trợ nhiều ngôn ngữ và có thể chứa các trang và biểu mẫu trong bất kỳ hỗn hợp nào của các ngôn ngữ đó .

UTF gì

UTF-8 là viết tắt của Định dạng chuyển đổi Unicode 8-bit . Đó là một bộ ký tự có hầu hết tất cả các ký tự, dấu câu và ký hiệu đã biết. UTF-8 bao gồm hàng chục nghìn ký tự được sử dụng trên toàn thế giới. HTML5 sử dụng UTF-8 làm mã hóa ký tự theo mặc định.