2009-06-19 8 views

Trả lời

22

Hai điều chính.

  1. Chúng cho phép bạn sử dụng các ký tự không được xác định trong bộ ký tự hiện tại. Ví dụ: bạn có thể sử dụng hợp pháp ASCII làm bộ ký tự và vẫn bao gồm các ký tự thorugh Unicode tùy ý.
  2. Chúng cho phép bạn trích dẫn các ký tự mà HTML mang lại ý nghĩa đặc biệt, như Simon đã lưu ý.
+0

3. Chúng cho phép bạn sử dụng các ký tự mà bạn không thể nhập trực tiếp vì một số lý do. Ví dụ đơn giản, có thể bạn không thể nhập từ "gräßlich" trên bàn phím của mình, nhưng hoàn toàn không có vấn đề gì khi nhập "gr ä ß lich". (Tất nhiên, bạn luôn có thể sao chép và dán các chữ "ä" và "ß" từ một nơi khác, nhưng đó không phải là bất cứ nơi nào thuận tiện.) –

+2

RegDwight, tôi đã để ý điều đó. Tốt hơn là tìm hiểu cách nhập bằng bàn phím/hệ điều hành của bạn hoặc sao chép nó nếu bạn cần nó chỉ một lần này.Các trang/không cần thiết/đầy đủ các thực thể khó đọc. –

14

"1 &lt; 2" cho phép bạn đặt "1 < 2" vào trang của mình.

Long trả lời:

Kể từ HTML sử dụng '<' để mở thẻ, bạn không thể chỉ cần gõ '<' nếu bạn muốn điều đó dưới dạng văn bản. Do đó, bạn phải có cách để nói "Tôi muốn văn bản < trong trang của tôi". Bất kỳ ai thiết kế HTML (hoặc, thực sự là SGML, người tiền nhiệm HTML) đã quyết định sử dụng '&điều gì đó;', vì vậy bạn cũng có thể đặt những thứ như không gian phá vỡ: '&nbsp;' (dấu cách không bị sập hoặc cho phép ngắt dòng) . Tất nhiên, bây giờ bạn cần phải có cách để nói '&', vì vậy bạn nhận được '&amp;' ...

+1

+1: Đừng quên rằng cũng cho phép bạn đặt dấu ngoặc kép bên trong các thuộc tính. –

+0

Nhưng tôi chỉ có thể viết " Hans

3

Thực thể ký tự được sử dụng để thể hiện ký tự được dành riêng để viết HTML cho.ex. <,>, /, & vv, nếu bạn muốn để đại diện cho những nhân vật trong nội dung của bạn, bạn nên sử dụng các đối tượng nhân vật, điều này sẽ giúp phân tích cú pháp để phân biệt giữa nội dung và đánh dấu

1

Bạn sử dụng các đơn vị để giúp trình phân tích cú pháp phân biệt khi một ký tự được biểu diễn dưới dạng HTML và những gì bạn thực sự muốn hiển thị cho người dùng, vì HTML sẽ đặt trước một bộ ký tự đặc biệt cho chính nó.

Gõ này theo nghĩa đen trong HTML

Tôi không có ý như vậy </mỉa mai >

sẽ gây ra "</mỉa mai >" tag biến mất,

ví dụ

Tôi không có ý như vậy

dưới dạng HTML không có thẻ định nghĩa như vậy. Trong trường hợp này, việc sử dụng các thực thể sẽ cho phép văn bản hiển thị chính xác.

ví dụ:

Không, thực sự!& lt;/sarcasm & gt;

cho

Không, thực sự! </sarcasm >

như mong muốn.

7

Chúng không phải, ngoài &amp;, &lt;, &gt;, &quot; và có thể là &nbsp;. Đối với tất cả các ký tự khác, chỉ cần sử dụng UTF-8.

+0

Lưu ý rằng '"' thực sự chỉ cần thiết trong các thuộc tính –

4

Trong SGML và XML, chúng không chỉ dành cho ký tự. Chúng là cơ chế bao gồm chung, và việc sử dụng chúng cho các ký tự đặc biệt chỉ là một trong nhiều trường hợp.

<!ENTITY signature "<hr/><p>Regards, <i>&myname;</i></p>"> 
<!ENTITY myname "John Doe"> 

Loại thực thể này không hữu ích cho trang web, vì chúng chỉ hoạt động ở chế độ XML và không thể bật chế độ phân tích cú pháp "xác thực" trong cấu hình trình duyệt.


Thực thể có thể được mở rộng đệ quy. Điều này cho phép sử dụng XML cho tấn công từ chối của Serice được gọi là "Billion Laughs Attack".


Firefox sử dụng các đơn vị nội bộ (trong XUL và như vậy) cho quốc tế hóa và thương hiệu độc lập tin nhắn (để làm cho cuộc sống dễ dàng hơn cho Flock và IceWeasel):

<!ENTITY hidemac.label "Hide &brandShortName;"> 
<!ENTITY hidewin.label "Hide - &brandShortName;"> 

Trong HTML bạn chỉ cần &lt;, &amp;&quot; để tránh sự mơ hồ giữa văn bản và đánh dấu.

Tất cả các thực thể khác về cơ bản đã bị lỗi thời bởi mã hóa Unicode và vẫn chỉ là giao ước (nhưng trình soạn thảo văn bản tốt nên có macro/đoạn mã có thể thay thế chúng).


Trong XHTML tất cả các đơn vị ngoại trừ vài cơ bản là có vấn đề, bởi vì sẽ không làm việc với phân tích cú pháp XML độc lập (ví dụ &nbsp; sẽ không hoạt động).

Để phân tích cú pháp tất cả các đối tượng XHTML bạn cần xác thực Trình phân tích cú pháp XML (tùy chọn thường được gọi là "giải quyết các bên ngoài"). Nếu bạn bỏ qua hoặc vít lên Danh mục DTD của mình, bạn sẽ tham gia vào DDoS of W3C servers.

+0

Lưu ý rằng câu trả lời này gây nhầm lẫn về thuật ngữ. Câu hỏi đặt ra là các thực thể * ký tự *, không phải là * tên *, * external *, hoặc * parameter * entity. – kjhughes