2009-01-12 15 views
91

Điều này đã gây nhầm lẫn cho tôi một thời gian. Với sự ra đời của UTF-8 như là tiêu chuẩn de-facto trong phát triển web tôi không chắc chắn trong những tình huống tôi phải sử dụng các thực thể html và cho những người nên tôi chỉ sử dụng các ký tự UTF-8.Khi nào một người nên sử dụng các thực thể HTML

Ví dụ: dấu gạch ngang, dấu và, v.v.

Hãy làm sáng tỏ vấn đề này. Nó sẽ được đánh giá cao.

+0

Một lưu ý phụ, htmlentities() trong PHP sẽ làm gì? –

+0

Đọc câu trả lời và nhận xét có vẻ như với tôi, chưa có quy tắc phổ quát ủng hộ cái này hay cái kia, và câu trả lời vẫn là * nó phụ thuộc *. –

Trả lời

63

Bạn thường không cần sử dụng các thực thể ký tự HTML nếu trình chỉnh sửa của bạn hỗ trợ Unicode. Các đối tượng có thể hữu ích khi:

  • Bàn phím của bạn không hỗ trợ ký tự bạn cần nhập. Ví dụ: nhiều bàn phím không có dấu gạch ngang hoặc biểu tượng bản quyền.
  • Trình chỉnh sửa của bạn không hỗ trợ Unicode (rất phổ biến cách đây vài năm, nhưng có thể không phải hôm nay).
  • Bạn muốn làm cho nó rõ ràng trong nguồn những gì đang xảy ra. Ví dụ: mã   rõ ràng hơn ký tự khoảng trắng tương ứng.
  • Bạn cần phải thoát khỏi các ký tự đặc biệt HTML như <, & hoặc ".
+1

Rất hữu ích. Cảm ơn. Tôi sử dụng một chương trình hữu ích để có được các nhân vật khác thường. Nó được gọi là popchar và được thực hiện bởi Ergonis nhưng chỉ dành cho OS X. – allesklar

+3

Lưu ý phụ: Wikipedia vẫn bắt buộc ' ' thay vì ký tự khoảng trống thực tế, một phần vì Firefox chuyển đổi U + 00A0 sang dạng U + 0020 dưới dạng. Vì vậy, việc sử dụng thực thể trong trường hợp đó là cách duy nhất để đảm bảo rằng nguồn không bị rối tung lên mỗi lần người dùng Firefox chỉnh sửa nó. – Joey

+2

Một tóm tắt tốt, nhưng liên quan đến điểm cuối cùng, nó '' 'thường cần thoát, không bao giờ'> '(và' "' cần thoát chỉ hiếm khi bên trong các giá trị thuộc tính) –

98

Dựa trên các nhận xét tôi đã nhận được, tôi đã xem xét thêm một chút. Có vẻ như hiện tại thực hành tốt nhất là từ bỏ việc sử dụng các thực thể HTML và sử dụng ký tự UTF-8 thực tế thay vì. Các lý do được liệt kê như sau:

  1. Mã hóa UTF-8 dễ đọc và chỉnh sửa hơn cho những người hiểu ý nghĩa của nhân vật và biết cách nhập.
  2. Mã hóa UTF-8 không dễ hiểu như mã hóa thực thể HTML cho những người không hiểu chúng, nhưng chúng có lợi thế là biểu hiện dưới dạng ký tự đặc biệt thay vì khó hiểu mã hóa thập phân hoặc thập lục phân.

Miễn là mã hóa trang của bạn được đặt đúng thành UTF-8, bạn nên sử dụng ký tự thực thay vì thực thể HTML. Tôi đọc một số tài liệu về chủ đề này, nhưng hữu ích nhất là:

Từ UTF-8: The Secret of Character Encoding bài viết:

Wikipedia là nghiên cứu điển hình tuyệt vời cho ứng dụng ban đầu được sử dụng ISO-8859-1 nhưng chuyển sang UTF-8 khi nó trở nên quá cồng kềnh để hỗ trợ ngôn ngữ nước ngoài. Bots giờ sẽ là thực sự xem qua các bài viết và chuyển đổi các thực thể ký tự thành các ký tự tương ứng thực sự của vì lợi ích của người dùng và khả năng tìm kiếm.

Bài viết đó cũng đưa ra một ví dụ điển hình về mã hóa tiếng Hoa. Dưới đây là ví dụ viết tắt vì lợi ích của sự lười biếng:

UTF-8:

這兩個字是甚麼意思

Đối tượng HTML:

&#36889;&#20841;&#20491;&#23383;&#26159;&#29978;&#40636;&#24847;&#24605;

Các UTF-8 và HTML mã hóa thực thể đều vô nghĩa đối với tôi, nhưng ít nhất là mã hóa UTF-8 có thể nhận ra như một ngôn ngữ nước ngoài và nó sẽ hiển thị chính xác trong hộp chỉnh sửa.Bài báo tiếp tục nói như sau về phiên bản thực thể mã hóa HTML:

Vô cùng bất tiện cho những người trong chúng những người thực sự biết những gì nhân vật thực thể là, hoàn toàn không thể hiểu được cho người dùng nghèo người không! Thậm chí thân thiện với người dùng hơn một chút, các đối tượng ký tự "dễ hiểu" như & theta; sẽ để người dùng không quan tâm đến việc học HTML gãi đầu. Mặt khác, nếu họ thấy θ trong hộp chỉnh sửa, họ sẽ biết rằng đó là một ký tự đặc biệt và xử lý nó theo cách phù hợp, ngay cả khi họ không biết cách tự viết ký tự đó.

Như những người khác đã lưu ý, bạn vẫn phải sử dụng các thực thể HTML cho các ký tự XML được đặt trước (ký hiệu, nhỏ hơn, lớn hơn).

+2

Đây phải là câu trả lời được chấp nhận. –

+0

Câu trả lời này giúp ích rất nhiều. Nhưng để làm rõ, cho sự hiểu biết của riêng tôi: không có gì nguy hiểm hoặc không hợp lệ về việc sử dụng '& thực thể; 'cú pháp trong một tài liệu HTML với một bảng mã UTF-8 được khai báo, đúng không? Mặc dù các ký tự UTF-8 thuần túy tốt hơn vì những lý do bạn đã liệt kê, không có vấn đề gì khi vẫn còn một số thực thể HTML bên cạnh chúng trong cùng một tài liệu? –

+0

@JacobFord Phải, việc trộn các thực thể HTML với các ký tự UTF-8 không nguy hiểm hoặc không hợp lệ, chỉ có khả năng gây nhầm lẫn cho người đọc nguồn. –

2

Nếu các trang của bạn được mã hóa chính xác trong utf-8, bạn không cần các thực thể html, chỉ cần sử dụng các ký tự bạn muốn trực tiếp.

+3

Tôi nghĩ bạn vẫn cần chúng để mã hóa các ký tự dành riêng. – rmeador

+0

@rmeador - Tôi đồng ý với điều đó. –

4

Thực thể có thể mua cho bạn một số khả năng tương thích với khách hàng đã chết não không hiểu mã hóa chính xác. Tôi không tin rằng bao gồm bất kỳ trình duyệt hiện tại nào, nhưng bạn không bao giờ biết những loại chương trình nào khác có thể sẽ đánh bạn.

Tuy nhiên, hữu ích hơn là các thực thể HTML bảo vệ bạn khỏi lỗi của riêng bạn: nếu bạn định cấu hình sai thứ gì đó trên máy chủ và bạn sẽ phân phát trang có tiêu đề HTTP cho biết đó là ISO-8859-1 và thẻ META có nội dung là UTF-8 , ít nhất & mdash của bạn sẽ luôn hoạt động.

+0

Rất tốt điểm đặc biệt nếu bạn là người lập trình phòng thủ;) – VBAssassin

+5

Bạn có thể làm cho đối số ngược lại mặc dù - '& mdash' hiển thị chính xác ngay cả khi tiêu đề bị định cấu hình sai khiến nó khó phát hiện hơn. –

4

Tôi sẽ không sử dụng UTF-8 cho các ký tự dễ nhầm lẫn một cách trực quan. Ví dụ, rất khó để phân biệt một emdash từ một trừ, hoặc đặc biệt là một không gian không phá vỡ từ một không gian. Đối với những nhân vật này, chắc chắn sử dụng các thực thể.

Đối với các ký tự dễ hiểu một cách trực quan (ví dụ như các ví dụ ở trên), hãy tiếp tục và sử dụng UTF-8 nếu bạn muốn.

2

Tất cả các câu trả lời trước đây đều hợp lý với tôi.

Ngoài ra: Phần lớn phụ thuộc vào trình chỉnh sửa bạn định sử dụng và ngôn ngữ tài liệu. Như một yêu cầu tối thiểu cho trình soạn thảo là nó hỗ trợ ngôn ngữ tài liệu.Điều đó có nghĩa, nếu văn bản của bạn bằng tiếng Nhật, hãy cẩn thận khi sử dụng trình chỉnh sửa không hiển thị chúng (nghĩa là không có thực thể nào cho chính tài liệu). Nếu tiếng Anh của nó, bạn thậm chí có thể sử dụng một trình soạn thảo giống như vim cũ và chỉ sử dụng các thực thể cho người tương đối hiếm khi & sao chép; và những người bạn. Tất nhiên: & gt; cho> và các đặc biệt HTML khác vẫn cần phải thoát. Nhưng ngay cả với các ngôn ngữ latin-1 khác (tiếng Đức, tiếng Pháp, v.v.) viết ä là một nỗi đau trong bạn biết ...

Ngoài ra, tôi tự viết thực thể cho các ký tự vô hình và các ký tự tương tự ascii tiêu chuẩn và do đó dễ nhầm lẫn. Ví dụ, có u1173 (trông giống như một dấu gạch ngang trong một số bộ ký tự) hoặc u1175, trông giống như thanh dọc. Tôi muốn sử dụng các thực thể cho những người trong mọi trường hợp.

4

Thực thể HTML hữu ích khi bạn muốn tạo nội dung sẽ được bao gồm (động) vào các trang có (một số) mã hóa khác nhau. Ví dụ: chúng tôi có nội dung nhãn màu trắng được bao gồm cả hai trang web được mã hóa theo ISO-8859-1 và UTF-8 ...

Nếu chuyển đổi tập ký tự từ/sang UTF-8 không phải là một mớ hỗn độn không đáng tin cậy lớn (Bạn luôn luôn vấp ngã một số ký tự và một số công cụ không chuyển đổi đúng cách), tiêu chuẩn hóa trên UTF-8 sẽ là cách để đi.

4

Cá nhân tôi làm tất cả mọi thứ trong utf-8 kể từ khi một thời gian dài, tuy nhiên, trong một trang html, bạn luôn cần phải chuyển đổi ampersands (&), lớn hơn (>) và ít hơn sau đó (<) ký tự cho các tổ chức tương đương của họ , & amp ;, & gt; và & lt;

Ngoài ra, nếu bạn dự định thực hiện một số chương trình bằng văn bản utf-8, có một số điều cần xem.

  • XML cần thêm một số dòng để xác thực khi sử dụng thực thể.
  • Một số thư viện không phát đẹp với utf-8. Ví dụ, PHP trong một số bản phân phối Linux đã giảm hỗ trợ đầy đủ cho utf-8 trong các thư viện biểu thức chính quy của chúng.
  • Khó giới hạn số ký tự trong văn bản sử dụng thực thể html, bởi vì một thực thể duy nhất sử dụng nhiều ký tự. Ngoài ra luôn có nguy cơ cắt thực thể làm đôi.