Mã hóa ký tự trong html5

Trình duyệt nên biết bộ ký tự nào (mã hóa ký tự) sẽ sử dụng. Cần phải hiển thị chính xác trang HTML

UTF-8 là mã hóa ký tự mặc định cho HTML5. Tuy nhiên, nó đã được sử dụng để được khác nhau. ASCII là bộ ký tự trước nó. Và ISO-8859-1 là bộ ký tự mặc định từ HTML 2. 0 cho đến HTML 4. 01

Tuy nhiên, vẫn có vấn đề với mã hóa và khi UTF-8 xuất hiện cùng với HTML5 và XML, nhiều vấn đề đã được giải quyết

Hãy xem chi tiết hơn về bộ ký tự

ASCII là tiêu chuẩn mã hóa ký tự đầu tiên, còn được gọi là bộ ký tự. Nó được viết tắt từ American Standard Code for Information Interchange

Đối với mỗi ký tự có thể lưu trữ, ASCII đã xác định một số nhị phân duy nhất để hỗ trợ bảng chữ cái viết hoa và viết thường (a-z, A-Z), các số từ 0-9 và các ký tự đặc biệt. Ban đầu nó dựa trên bảng chữ cái tiếng Anh và mã hóa 128 ký tự thành số nguyên nhị phân 7 bit vì người ta biết rằng tất cả thông tin máy tính được ghi dưới dạng số nhị phân và số không (01000101) trong thiết bị điện tử.

Dưới đây, bạn có thể thấy một biểu đồ ASCII

Mã hóa ký tự trong html5

Vấn đề lớn nhất đối với ASCII là nó không có các chữ cái không phải tiếng Anh. Nó vẫn được sử dụng, đặc biệt là trong các máy tính lớn

Nhấn vào đây để xem thêm về ASCII

ANSI, còn được gọi là Windows-1252, là ký tự mặc định được đặt cho Windows cho đến Windows 95. Nó là một phần mở rộng cho ASCII, có thêm các ký tự quốc tế. Nó hỗ trợ 256 ký tự sử dụng một byte đầy đủ (8-bit)

ANSI được tất cả các trình duyệt hỗ trợ kể từ khi nó được công bố là bộ ký tự mặc định của Windows

ISO-8859-1 trở thành mã hóa ký tự mặc định trong HTML2. 0, vì hầu hết các quốc gia sử dụng các ký tự khác với ASCII. Nó cũng là một phần mở rộng của ASCII, giống như ANSI, và nó thêm các ký tự quốc tế. ISO-885-1 cũng sử dụng một byte đầy đủ để hiển thị gấp đôi số ký tự so với ASCII

Nhấn vào đây để xem thêm về ISO-8859-1

ISO-8859-1 là phần mở rộng của ASCII, có thêm các ký tự quốc tế

Nếu trang HTML4 sử dụng mã hóa ký tự khác với ISO-8859-1, mã hóa này phải được xác định trong thẻ

Tất cả các bộ xử lý HTML4 đều hỗ trợ UTF-8

Khi một trình duyệt phát hiện ISO-8859-1, nó thường mặc định là ANSI, vì cái sau có thêm 32 ký tự quốc tế

UTF-8 là mã hóa ký tự mặc định cho HTML5

Vì các bộ ký tự được đề cập ở trên bị hạn chế, Unicode Consortium đã phát triển một Tiêu chuẩn Unicode

Bộ ký tự HTML còn được gọi là Bộ ký tự HTML hoặc Mã hóa HTML. Nó được sử dụng để hiển thị đúng và chính xác một trang HTML vì để hiển thị chính xác mọi thứ, trình duyệt web phải biết sử dụng bộ ký tự nào (mã hóa ký tự)

Mã hóa ký tự HTML

Có nhiều loại Mã hóa ký tự được đưa ra dưới đây

Bộ ký tự ASCII

ASCII là viết tắt của Mã tiêu chuẩn Mỹ để trao đổi thông tin. Trong HTML, tiêu chuẩn mã hóa ký tự đầu tiên là tiêu chuẩn ASCII. ASCII cung cấp 128 ký tự chữ và số khác nhau có thể được sử dụng trên internet. số (0-9), chữ cái tiếng Anh (A-Z), và một số ký tự đặc biệt như. $ + - ( ) @ <>

Vấn đề chính với mã hóa ASCII là nó chứa một số ký tự giới hạn. Nó chứa chủ yếu 128 ký tự

Bộ ký tự ANSI

ANSI là viết tắt của Viện tiêu chuẩn quốc gia Hoa Kỳ. Đó là tiêu chuẩn bộ ký tự là phiên bản mở rộng của bộ ký tự ASCII tiêu chuẩn. Nó hỗ trợ bộ 256 ký tự. ANSI còn được gọi là Windows-1252 và đó là ký tự mặc định được đặt cho Windows cho đến Windows 95

Bộ ký tự ISO-8859-1

ISO-8859-1 là mã hóa ký tự mặc định trong HTML 2. 0. Nó cũng là một phần mở rộng của tiêu chuẩn ASCII với các ký tự Quốc tế. Nó cũng sử dụng toàn bộ byte (8 bit) để hiển thị các ký tự

Bộ ký tự UTF-8

UTF-8 là mã hóa ký tự có độ rộng thay đổi bao gồm hầu hết tất cả các ký tự và ký hiệu trên thế giới. ANSI (Windows-1252) là bộ ký tự gốc của Windows, hỗ trợ 256 mã ký tự khác nhau

ISO-8859-1 là bộ ký tự mặc định cho HTML 4. Bộ ký tự này cũng hỗ trợ 256 mã ký tự khác nhau

Tại sao UTF 8 cũng được hỗ trợ trong HTML4?

Vì ANSI và ISO-8859-1 quá hạn chế nên HTML 4 cũng hỗ trợ UTF-8. Mã hóa ký tự mặc định cho HTML5 là UTF-8

Chào mừng bạn trở lại chuyên mục bán thường xuyên của tôi, "Con đường dẫn đến HTML 5", nơi tôi sẽ cố gắng giải thích một số phần tử, thuộc tính mới và các tính năng khác trong đặc tả HTML 5 sắp tới

Tính năng của ngày hôm nay là mã hóa ký tự, cụ thể là cách xác định mã hóa ký tự của tài liệu HTML. Tôi chưa bao giờ hạnh phúc hơn khi tôi viết về mã hóa ký tự. Nhưng trước tiên, đây là mô tả "cao độ thang máy" tiêu chuẩn của tôi về mã hóa ký tự là gì

Khi bạn nghĩ về "văn bản", bạn có thể nghĩ đến "các ký tự và biểu tượng tôi nhìn thấy trên màn hình máy tính của mình". " Nhưng máy tính không xử lý các ký tự và ký hiệu; chúng xử lý theo bit và byte. Mỗi đoạn văn bản bạn từng thấy trên màn hình máy tính thực sự được lưu trữ trong một mã hóa ký tự cụ thể. Có nhiều mã hóa ký tự khác nhau, một số được tối ưu hóa cho các ngôn ngữ cụ thể như tiếng Nga hoặc tiếng Trung hoặc tiếng Anh và một số khác có thể được sử dụng cho nhiều ngôn ngữ. Nói một cách đại khái, mã hóa ký tự cung cấp ánh xạ giữa nội dung bạn nhìn thấy trên màn hình và nội dung mà máy tính của bạn thực sự lưu trữ trong bộ nhớ và trên đĩa

Trong thực tế, nó phức tạp hơn thế. Nhiều ký tự chung cho nhiều mã hóa, nhưng mỗi mã hóa có thể sử dụng một chuỗi byte khác nhau để thực sự lưu trữ các ký tự đó trong bộ nhớ hoặc trên đĩa. Vì vậy, bạn có thể coi mã hóa ký tự như một loại khóa giải mã cho văn bản. Bất cứ khi nào ai đó cung cấp cho bạn một chuỗi byte và tuyên bố đó là "văn bản", bạn cần biết họ đã sử dụng mã hóa ký tự nào để bạn có thể giải mã byte thành ký tự và hiển thị chúng (hoặc xử lý chúng hoặc bất kỳ thứ gì)

- nguồn

Và một lần nữa mình nhắc lại bộ link nền chuẩn của mình cho những bạn chưa biết gì về bảng mã ký tự. Bạn phải đọc cuốn sách của Joel Spolsky Mức tối thiểu tuyệt đối mà mọi nhà phát triển phần mềm phải biết một cách tích cực về Unicode và bộ ký tự (Không bào chữa. ) Bạn nên đọc loạt bài ba phần của Tim Bray, On the Goodness of Unicode, On Character Strings, và Characters vs. Byte và bất cứ thứ gì được viết bởi Martin Dürst

Tôi cũng nên chỉ ra rằng bạn phải luôn chỉ định mã hóa ký tự trên mọi trang HTML mà bạn phục vụ. Không chỉ định mã hóa có thể dẫn đến lỗ hổng bảo mật

Vì vậy, làm thế nào để trình duyệt của bạn thực sự xác định mã hóa ký tự của luồng byte mà máy chủ web gửi?

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

Tóm lại, điều này nói rằng máy chủ web nghĩ rằng nó đang gửi cho bạn một tài liệu HTML và nó nghĩ rằng tài liệu đó sử dụng mã hóa ký tự UTF-8. Thật không may, trong toàn bộ món súp tuyệt vời của web trên toàn thế giới, rất ít tác giả thực sự có quyền kiểm soát máy chủ HTTP của họ. Nghĩ về Blogger. nội dung được cung cấp bởi các cá nhân, nhưng các máy chủ được điều hành bởi Google. Vì vậy, HTML 4 đã cung cấp một cách để chỉ định mã hóa ký tự trong chính tài liệu HTML. Chắc bạn cũng đã thấy cái này

Tóm lại, điều này nói rằng tác giả web nghĩ rằng họ đã tạo ra một tài liệu HTML bằng cách sử dụng mã hóa ký tự UTF-8. Bây giờ, bạn có thể dễ dàng hình dung một tình huống mà cả máy chủ và tài liệu đều cung cấp thông tin mã hóa. Hơn nữa, chúng có thể không khớp (đặc biệt nếu chúng được điều hành bởi những người khác nhau). Vậy cái nào thắng?

Đây là những gì HTML 4. 01 phải nói về thứ tự ưu tiên để xác định mã hóa ký tự

  1. Người dùng ghi đè (e. g. người dùng đã chọn mã hóa từ menu trong trình duyệt của họ)
  2. Tham số "bộ ký tự" HTTP trong trường "Loại nội dung"
  3. Khai báo META với thuộc tính "http-equiv" được đặt thành "Loại nội dung" và giá trị được đặt cho "bộ ký tự"
  4. Thuộc tính bộ ký tự được đặt trên một phần tử chỉ định một tài nguyên bên ngoài
  5. Phân tích heuristic không xác định

Và đây là những gì HTML 5 nói về nó. Tôi sẽ không trích dẫn toàn bộ ở đây, nhưng đủ để nói rằng đó là một thuật toán gồm 7 bước; . Nó tiếp tục như vậy trong một thời gian. Ý chính của nó là

  1. Người dùng ghi đè
  2. Tham số "bộ ký tự" HTTP trong trường "Loại nội dung"
  3. Thứ tự Byte Đánh dấu trước bất kỳ dữ liệu nào khác trong chính tài liệu HTML
  4. Khai báo META với thuộc tính "charset"
  5. Khai báo META với thuộc tính "http-equiv" được đặt thành "Loại nội dung" và giá trị được đặt cho "bộ ký tự"
  6. Phân tích heuristic không xác định

và sau đó

  1. Bình thường hóa chuỗi mã hóa ký tự đã cho theo quy tắc Khớp bí danh ký tự được xác định trong Tiêu chuẩn kỹ thuật Unicode #22
  2. Ghi đè một số mã hóa có vấn đề, tôi. e. cố ý coi một số mã hóa như thể chúng là các mã hóa khác nhau. Ghi đè phổ biến nhất là coi US-ASCIIISO-8859-1Windows-1252, nhưng có một số ghi đè mã hóa khác được liệt kê trong bảng này. Như thông số kỹ thuật lưu ý, "Yêu cầu coi một số mã hóa nhất định là các mã hóa khác theo bảng trên là vi phạm có chủ ý đối với đặc tả Mô hình ký tự W3C. "

Hai điều nên nhảy ra ở bạn ở đây. Đầu tiên, WTF là một thuộc tính

0? . Nó trông như thế này

1

Tôi chỉ có thể tìm thấy cuộc thảo luận rải rác về thuộc tính này trên danh sách gửi thư WHATWG

  • tháng 3 năm 2006. Tuyên bố mã hóa ký tự Internet, cụ thể là bài đăng này của Lachlan Hunt đã đưa ra các yêu cầu để "mở đường cho bò" về các lỗi tác giả phổ biến
  • tháng 6 năm 2007. Khai báo mã hóa ký tự bên trong, Bỏ UTF-32 và thuật ngữ UTF và BOM

Lời giải thích tốt nhất về thuộc tính

0 mới được đưa ra vài tháng sau, trong một chủ đề không liên quan, trên một danh sách gửi thư riêng. Andrew Sidwell giải thích

Cơ sở lý luận cho sự kết hợp thuộc tính UTF-80 là các UA đã triển khai nó, bởi vì mọi người có xu hướng bỏ qua những thứ không được trích dẫn, chẳng hạn như

UTF-81

(Thậm chí có một vài trường hợp thử nghiệm

0 nếu bạn không tin rằng các trình duyệt đã làm điều này. )

Thứ hai, ai là người— nhóm WHATWG nghĩ rằng họ đang chỉ định "sự cố ý vi phạm đặc điểm kỹ thuật của Mô hình nhân vật W3C" Đây là . Cũng như nhiều câu hỏi như vậy, câu trả lời là HTML 5 chỉ mã hóa những gì trình duyệt đã làm. ISO-8859-1 và Windows-1252 là các mã hóa rất giống nhau. Một điểm chúng khác nhau là ở cái gọi là "dấu ngoặc kép thông minh" và "dấu nháy đơn" - những khởi sắc kiểu chữ nhỏ xinh mà các tác giả yêu thích và Microsoft Word (và nhiều trình soạn thảo khác) xuất ra theo mặc định. Nhiều tác giả chỉ định mã hóa ISO-8559-1 hoặc US-ASCII (vì họ đã sao chép phần mẫu đó từ một nơi khác), nhưng sau đó họ sử dụng dấu ngoặc kép từ mã hóa Windows-1252. Lỗi này phổ biến đến mức các trình duyệt đã coi ISO-8859-1 là Windows-1252. HTML 5 chỉ là "lát đường bò" ở đây.

Tóm lại. mã hóa ký tự rất phức tạp và nó đã không được thực hiện dễ dàng hơn sau nhiều thập kỷ phần mềm được viết kém được sử dụng bởi các tác giả có học thức sao chép và dán. Bạn phải luôn chỉ định mã hóa ký tự trên mọi tài liệu HTML, nếu không điều tồi tệ sẽ xảy ra. Bạn có thể làm theo cách khó (tiêu đề HTTP UTF-83), cách dễ (khai báo UTF-84) hoặc cách mới (thuộc tính

0), nhưng hãy làm theo. web cảm ơn bạn

Làm cách nào để đặt mã hóa ký tự trong HTML5?

Bạn có thể sử dụng phần tử . Cú pháp trên thay thế nhu cầu

3 loại mã hóa ký tự là gì?

Có ba bảng mã ký tự Unicode khác nhau. UTF-8, UTF-16 và UTF-32 .

Cách đặt UTF

Mã hóa ký tự phải được chỉ định cho mọi trang HTML, bằng cách sử dụng tham số bộ ký tự trên tiêu đề phản hồi HTTP Kiểu nội dung (e. g. Loại nội dung. văn bản/html; . .

Là HTML ASCII hay UTF

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