Khi nào nên sử dụng các thực thể HTML?


115

Đ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 là tiêu chuẩn thực tế trong phát triển web, tôi không chắc chắn trong những tình huống nào tôi nên sử dụng các thực thể HTML và tôi nên sử dụng ký tự UTF-8 nào. Ví dụ,

  • em gạch ngang (-, &emdash;)
  • ký hiệu (&, &)
  • Phân số 3/4 (¾, ¾)

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


Bên cạnh đó, htmlentities () trong PHP sẽ làm gì?
Joe Phillips

Đọc các câu trả lời và bình luận dường như đối với tôi vẫn chưa có một quy tắc phổ quát nào có lợi cho người này hay người kia, và câu trả lời vẫn là tùy thuộc .
Majid fouadpour

Câu trả lời:


76

Nói chung, bạn không cần sử dụng các thực thể ký tự HTML nếu trình soạn thảo của bạn hỗ trợ Unicode. Các thực thể 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ó biểu tượng em-dash 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 vài năm trước, nhưng có lẽ 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 nhân vật đặc biệt HTML thích <, &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 tạo bởi Ergonis nhưng chỉ dành cho OS X.
allesklar

3
Lưu ý bên lề: Wikipedia vẫn bắt buộc &nbsp;thay vì ký tự khoảng trắng thực tế, một phần vì Firefox chuyển đổi U + 00A0 thành U + 0020 dưới dạng. Vì vậy, 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 mỗi khi người dùng Firefox chỉnh sửa nó.
Joey

2
Một bản 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à chỉ "cần thoát hiếm khi bên trong các giá trị thuộc tính).
Jukka K. Korpela

Một lý do khác để giữ & nbsp; là để bạn có thể hiển thị nhiều khoảng trắng trên trang HTML.
zylstra

Vì vậy, &amp;nên luôn luôn được sử dụng thay vì &? Có một lý do cho điều này?
Prometheus

116

Dựa trên những 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 cách tốt nhất là từ bỏ sử dụng các thực thể HTML và sử dụng ký tự UTF-8 thực tế thay thế . Những 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 ký tự và biết cách nhập nó.
  2. Mã hóa UTF-8 cũng khó 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à hiển thị dưới dạng các 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 tế 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: Bài viết về bí mật mã hóa nhân vật :

Wikipedia là một trường hợp nghiên cứu tuyệt vời cho một ứng dụng ban đầu 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ợ ngoại ngữ. Bots giờ đây sẽ thực sự đi qua các bài báo và chuyển đổi các thực thể nhân vật thành các nhân vật thực tương ứng của họ vì mục đích thân thiện với người dùng và tìm kiếm .

Bài báo đó cũng đưa ra một ví dụ hay liên quan đến mã hóa Trung Quốc. Dưới đây là ví dụ viết tắt cho sự lười biếng:

UTF-8:

這兩個字是甚麼意思

Các thực thể HTML :

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

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

Vô cùng bất tiện cho những người trong chúng ta thực sự biết các thực thể nhân vật là gì, hoàn toàn không thể hiểu được đối với những người dùng nghèo không! Ngay cả các thực thể nhân vật "dễ hiểu", thân thiện với người dùng hơn một chút như & theta; sẽ khiến những 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 nhân vật đặc biệt và đối xử với nó phù hợp, ngay cả khi họ không biết cách tự viết nhân vậ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 dành riêng (ký hiệu, ít hơn, lớn hơn).


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

@JacobFord Đúng, trộn các thực thể HTML với các ký tự UTF-8 không có rủi ro hoặc không hợp lệ, chỉ có thể gây nhầm lẫn cho ai đó đọc nguồn.
William Brendel

5

Tôi sẽ không sử dụng UTF-8 cho các ký tự dễ bị nhầm lẫn về mặt trực quan. Ví dụ, rất khó để phân biệt một emdash với một điểm 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 các 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 trực quan (như ví dụ tiếng Trung ở trên), hãy tiếp tục và sử dụng UTF-8 nếu bạn muốn.


5

Cá nhân tôi làm mọi thứ trong utf-8 trong 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 ký hiệu (&), lớn hơn (>) và ít hơn (<) ký tự thành các thực thể tương đương của chúng, & amp;, & gt; và & lt;

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

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

Đó là một điểm rất nhỏ, nhưng không có yêu cầu mã hóa lớn hơn (>), chỉ nhỏ hơn (<).
Codemonkey

4

Các thực thể có thể mua cho bạn một số khả năng tương thích với các 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ể đánh bại bạn.

Hữu ích hơn, tuy nhiên, là thực thể HTML bảo vệ bạn khỏi những lỗi của riêng bạn: nếu bạn misconfigure một cái gì đó trên máy chủ và bạn kết thúc phục vụ một trang với một tiêu đề HTTP nói rằng nó ISO-8859-1và một METAthẻ có nội dung nó UTF-8, ít nhất bạn & mdash; es sẽ luôn làm việc


5
Mặc dù vậy, bạn có thể đưa ra lập luận ngược lại - &mdashes hiển thị chính xác ngay cả khi các tiêu đề được định cấu hình sai khiến việc phát hiện vấn đề trở nên khó khăn hơn .
Pekka

4

Các thực thể HTML rất hữu ích khi bạn muốn tạo nội dung sẽ được đưa vào (độ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 trắng được bao gồm cả trong các trang web được mã hóa ISO-8859-1 và UTF-8 ...

Nếu chuyển đổi bộ 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 như vậy (bạn luôn vấp phải một số ký tự và một số công cụ không chuyển đổi chính xác), thì việc chuẩn hóa UTF-8 sẽ là cách tốt nhất.


2

Nếu các trang của bạn được mã hóa chính xác trong utf-8, bạn sẽ 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 sẽ cần chúng để mã hóa các ký tự dành riêng.
rmeador

@rmeador - Tôi đồng ý với điều đó.
Otávio Décio

2

Tất cả các câu trả lời trước đó có ý nghĩa với tôi.

Ngoài ra: Nó chủ yếu phụ thuộc vào trình soạn thảo 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 là, 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 (tức là không có thực thể nào cho tài liệu đó). Nếu là tiếng Anh, bạn thậm chí có thể sử dụng trình soạn thảo giống như vim cũ và chỉ sử dụng các thực thể cho mục đích tương đối hiếm khi & copy; 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 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 nơi ...

Ngoài ra, cá nhân tôi viết các thực thể cho các nhân vật vô hình và những nhân vật trông giống như ascii tiêu chuẩn và do đó rất dễ bị 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 sẽ sử dụng các thực thể cho những người trong mọi trường hợp.


& gt; KHÔNG cần cho>, bạn chỉ có thể sử dụng>. & lt; IS cần thiết cho <, mặc dù.
Codemonkey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.