เมื่อใดควรใช้เอนทิตี HTML


115

สิ่งนี้ทำให้ฉันสับสนมาระยะหนึ่งแล้ว ด้วยการถือกำเนิดของ UTF-8 เป็นมาตรฐาน de-facto ในการพัฒนาเว็บฉันไม่แน่ใจว่าในสถานการณ์ใดที่ฉันควรใช้เอนทิตี HTML และฉันควรใช้อักขระ UTF-8 ในสถานการณ์ใด ตัวอย่างเช่น,

  • em dash (-, &emdash;)
  • เครื่องหมายและ (&, &)
  • 3/4 เศษ (¾, ¾)

โปรดแจ้งให้ทราบเกี่ยวกับปัญหานี้ จะได้รับการชื่นชม


หมายเหตุด้านข้าง htmlentities () ใน PHP จะทำอะไร?
Joe Phillips

อ่านคำตอบและความเห็นดูเหมือนว่าฉันมียังไม่ได้เป็นกฎสากลในความโปรดปรานของหนึ่งหรืออื่น ๆ และคำตอบยังคงเป็นมันขึ้นอยู่กับ
Majid Fouladpour

คำตอบ:


76

โดยทั่วไปคุณไม่จำเป็นต้องใช้เอนทิตีอักขระ HTML หากตัวแก้ไขของคุณรองรับ Unicode เอนทิตีจะมีประโยชน์เมื่อ:

  • แป้นพิมพ์ของคุณไม่รองรับอักขระที่คุณต้องการพิมพ์ ตัวอย่างเช่นแป้นพิมพ์จำนวนมากไม่มี em-dash หรือสัญลักษณ์ลิขสิทธิ์
  • โปรแกรมแก้ไขของคุณไม่รองรับ Unicode (เป็นเรื่องปกติมากเมื่อหลายปีก่อน แต่อาจไม่ใช่ในปัจจุบัน)
  • คุณต้องการทำให้ชัดเจนในแหล่งที่มาว่าเกิดอะไรขึ้น ตัวอย่างเช่น รหัสจะชัดเจนกว่าอักขระช่องว่างที่เกี่ยวข้อง
  • คุณจำเป็นต้องหลบหนี HTML อักขระพิเศษชอบ<, หรือ&"

1
เป็นประโยชน์มาก ขอบคุณ ฉันใช้โปรแกรมที่เป็นประโยชน์เพื่อรับอักขระที่ผิดปกติ เรียกว่า popchar และผลิตโดย Ergonis แต่ใช้สำหรับ OS X เท่านั้น
allesklar

3
หมายเหตุด้านข้าง: Wikipedia ยังคงกำหนด&nbsp;แทนอักขระช่องว่างจริงส่วนหนึ่งเป็นเพราะ Firefox แปลง U + 00A0 เป็น U + 0020 ในรูปแบบ ดังนั้นการใช้เอนทิตีในกรณีนี้จึงเป็นวิธีเดียวที่จะทำให้แน่ใจได้ว่าแหล่งที่มาจะไม่ยุ่งเหยิงทุกครั้งที่ผู้ใช้ Firefox แก้ไข
Joey

2
บทสรุปที่ดี แต่ในประเด็นสุดท้าย<มักจะต้องมีการ Escape ไม่เคย>(และ"ต้องการการหลีกเลี่ยงเฉพาะในค่าแอตทริบิวต์เท่านั้น)
Jukka K. Korpela

อีกเหตุผลหนึ่งที่ควรเก็บ & nbsp; เพื่อให้คุณสามารถแสดงช่องว่างหลายช่องบนหน้า HTML
zylstra

ดังนั้น&amp;ควรใช้แทน&? มีเหตุผลนี้หรือไม่?
Prometheus

116

จากความคิดเห็นที่ฉันได้รับฉันได้ตรวจสอบเรื่องนี้เพิ่มเติมอีกเล็กน้อย ดูเหมือนว่าขณะนี้การปฏิบัติที่ดีที่สุดคือการละเลยการใช้หน่วยงาน HTML และใช้จริง UTF-8 ตัวอักษรแทน เหตุผลดังต่อไปนี้:

  1. การเข้ารหัส UTF-8 นั้นอ่านและแก้ไขได้ง่ายกว่าสำหรับผู้ที่เข้าใจความหมายของอักขระและรู้วิธีพิมพ์
  2. การเข้ารหัส UTF-8 นั้นไม่สามารถเข้าใจได้เช่นเดียวกับการเข้ารหัสเอนทิตี HTML สำหรับผู้ที่ไม่เข้าใจ แต่มีข้อดีของการแสดงผลเป็นอักขระพิเศษแทนที่จะเข้าใจการเข้ารหัสทศนิยมหรือฐานสิบหกได้ยาก

ตราบใดที่การเข้ารหัสของเพจของคุณถูกตั้งค่าเป็น UTF-8 อย่างถูกต้องคุณควรใช้อักขระจริงแทนเอนทิตี HTML ฉันอ่านเอกสารหลายฉบับเกี่ยวกับหัวข้อนี้ แต่สิ่งที่เป็นประโยชน์ที่สุด ได้แก่ :

จากบทความUTF-8: The Secret of Character Encoding :

Wikipedia เป็นกรณีศึกษาที่ยอดเยี่ยมสำหรับแอปพลิเคชันที่เดิมใช้ ISO-8859-1 แต่เปลี่ยนไปใช้ UTF-8 เมื่อมันยุ่งยากเกินไปที่จะรองรับภาษาต่างประเทศ บอทตอนนี้จะจริงไปผ่านบทความและแปลงหน่วยงานที่ตัวละครตัวละครจริงที่สอดคล้องกันของพวกเขาเพื่อประโยชน์ในการใช้เป็นมิตรและความสามารถในการค้นหา

บทความนั้นยังให้ตัวอย่างที่ดีเกี่ยวกับการเข้ารหัสภาษาจีน นี่คือตัวอย่างโดยย่อเพื่อความเกียจคร้าน:

UTF-8:

這兩個字是甚麼意思

เอนทิตี HTML :

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

การเข้ารหัสเอนทิตี UTF-8 และ HTML ไม่มีความหมายสำหรับฉัน แต่อย่างน้อยการเข้ารหัส UTF-8 ก็จำได้ว่าเป็นภาษาต่างประเทศและจะแสดงผลอย่างถูกต้องในช่องแก้ไข บทความกล่าวต่อไปนี้เกี่ยวกับเวอร์ชันที่เข้ารหัสเอนทิตี HTML:

ไม่สะดวกอย่างยิ่งสำหรับพวกเราที่รู้ว่าเอนทิตีตัวละครคืออะไรไม่เข้าใจโดยสิ้นเชิงสำหรับผู้ใช้ที่ไม่ดีที่ไม่ได้! แม้แต่เอนทิตีอักขระที่ "เข้าใจง่าย" ที่ใช้งานง่ายกว่าเล็กน้อยเช่น & theta; จะทำให้ผู้ใช้ที่ไม่สนใจเรียนรู้ HTML เกาหัว ในทางกลับกันถ้าพวกเขาเห็นθในช่องแก้ไขพวกเขาจะรู้ว่าเป็นอักขระพิเศษและปฏิบัติตามแม้ว่าพวกเขาจะไม่รู้ว่าจะเขียนอักขระนั้นอย่างไร

ดังที่ผู้อื่นกล่าวไว้คุณยังคงต้องใช้เอนทิตี HTML สำหรับอักขระ XML ที่สงวนไว้ (เครื่องหมายและน้อยกว่ามากกว่า)


คำตอบนี้ช่วยได้อย่างมาก แต่ขอชี้แจงเพื่อความเข้าใจของฉันเอง: ไม่มีอะไรที่เสี่ยงหรือไม่ถูกต้องเกี่ยวกับการใช้&entity;ไวยากรณ์ภายในเอกสาร HTML ที่มีชุดอักขระ UTF-8 ที่ประกาศถูกต้องหรือไม่? แม้ว่าอักขระ UTF-8 ธรรมดาจะดีกว่าสำหรับเหตุผลที่คุณระบุไว้ แต่ก็ไม่มีปัญหาใด ๆ ที่ยังคงมีเอนทิตี HTML อยู่ข้างๆในเอกสารเดียวกัน
Jacob Ford

@JacobFord ใช่แล้วการผสมเอนทิตี HTML กับอักขระ UTF-8 นั้นไม่มีความเสี่ยงหรือไม่ถูกต้องเพียงแค่อาจทำให้คนที่อ่านซอร์สสับสน
William Brendel

5

ฉันจะไม่ใช้ UTF-8 สำหรับตัวอักษรที่สับสนทางสายตาได้ง่าย ตัวอย่างเช่นเป็นการยากที่จะแยกแยะ emdash จากเครื่องหมายลบหรือโดยเฉพาะอย่างยิ่งช่องว่างที่ไม่แตกออกจากช่องว่าง สำหรับอักขระเหล่านี้ให้ใช้เอนทิตีอย่างแน่นอน

สำหรับอักขระที่มองเห็นได้ง่าย (เช่นตัวอย่างภาษาจีนด้านบน) ให้ใช้ UTF-8 ได้เลยหากต้องการ


5

โดยส่วนตัวแล้วฉันทำทุกอย่างใน utf-8 มานานแล้วอย่างไรก็ตามในหน้า html คุณจะต้องแปลงเครื่องหมายแอมเพอร์แซนด์ (&) มากกว่า (>) และน้อยกว่า (<) อักขระให้เป็นเอนทิตีที่เท่ากันเสมอ & amp ;, & gt; และ & lt;

นอกจากนี้หากคุณตั้งใจจะเขียนโปรแกรมโดยใช้ข้อความ utf-8 มีบางสิ่งที่ควรระวัง

  • XML ต้องการบรรทัดเพิ่มเติมเพื่อตรวจสอบความถูกต้องเมื่อใช้เอนทิตี
  • ห้องสมุดบางแห่งไม่สามารถเล่นได้ดีกับ utf-8 ตัวอย่างเช่น PHP ในลินุกซ์บางรุ่นไม่รองรับ utf-8 ในไลบรารีนิพจน์ทั่วไป
  • เป็นการยากที่จะ จำกัด จำนวนอักขระในข้อความที่ใช้เอนทิตี html เนื่องจากเอนทิตีเดียวใช้อักขระจำนวนมาก นอกจากนี้ยังมีความเสี่ยงที่จะตัดเอนทิตีออกครึ่งหนึ่งเสมอ

เป็นจุดเล็กน้อยมาก แต่ไม่มีข้อกำหนดในการเข้ารหัสที่มากกว่า (>) เพียงน้อยกว่า (<)
Codemonkey

4

เอนทิตีอาจซื้อความเข้ากันได้ของคุณกับไคลเอนต์ที่สมองตายซึ่งไม่เข้าใจการเข้ารหัสอย่างถูกต้อง ฉันไม่เชื่อว่ารวมถึงเบราว์เซอร์ปัจจุบันด้วย แต่คุณไม่มีทางรู้ว่ามีโปรแกรมประเภทใดบ้างที่จะมากระทบคุณ

แม้ว่าจะมีประโยชน์มากกว่านั้นก็คือเอนทิตี HTML จะปกป้องคุณจากข้อผิดพลาดของคุณเอง: หากคุณกำหนดค่าบางอย่างบนเซิร์ฟเวอร์ไม่ถูกต้องและคุณลงเอยด้วยการแสดงหน้าที่มีส่วนหัว HTTP ที่ระบุว่าเป็นISO-8859-1และMETAแท็กที่ระบุว่าเป็นUTF-8อย่างน้อยที่สุดของคุณ & mdash; es จะทำงานเสมอ


5
คุณสามารถทำให้อาร์กิวเมนต์ตรงข้ามแม้ว่า - &mdashES แสดงอย่างถูกต้องแม้ว่าส่วนหัวจะทำให้ผิดพลาดมันยากในการตรวจสอบมีปัญหา
Pekka

4

เอนทิตี HTML มีประโยชน์เมื่อคุณต้องการสร้างเนื้อหาที่จะรวม (แบบไดนามิก) ลงในหน้าที่มีการเข้ารหัสที่แตกต่างกัน (หลายรายการ) ตัวอย่างเช่นเรามีเนื้อหาฉลากขาวที่รวมอยู่ในหน้าเว็บที่เข้ารหัส ISO-8859-1 และ UTF-8 ...

หากการแปลงชุดอักขระจาก / เป็น UTF-8 ไม่ใช่เรื่องใหญ่ที่ไม่น่าเชื่อถือ (คุณมักจะสะดุดกับอักขระบางตัวและเครื่องมือบางตัวที่แปลงไม่ถูกต้อง) การกำหนดมาตรฐานบน UTF-8 จะเป็นหนทางที่จะไป


2

หากเพจของคุณเข้ารหัสอย่างถูกต้องใน utf-8 คุณไม่จำเป็นต้องใช้เอนทิตี html เพียงแค่ใช้อักขระที่คุณต้องการโดยตรง


3
ฉันคิดว่าคุณยังคงต้องการให้พวกเขาเข้ารหัสอักขระที่สงวนไว้
rmeador

@rmeador - ฉันเห็นด้วยกับสิ่งนั้น
OtávioDécio

2

คำตอบทั้งหมดก่อนหน้านี้มีความหมายสำหรับฉัน

นอกจากนี้: ส่วนใหญ่ขึ้นอยู่กับตัวแก้ไขที่คุณต้องการใช้และภาษาของเอกสาร ตามข้อกำหนดขั้นต่ำสำหรับโปรแกรมแก้ไขคือรองรับภาษาเอกสาร นั่นหมายความว่าหากข้อความของคุณเป็นภาษาญี่ปุ่นโปรดระวังการใช้โปรแกรมแก้ไขที่ไม่แสดง (กล่าวคือไม่มีเอนทิตีสำหรับเอกสารนั้นเอง) หากเป็นภาษาอังกฤษคุณยังสามารถใช้ตัวแก้ไขแบบเป็นกลุ่มเก่าและใช้เอนทิตีเฉพาะสำหรับญาติที่ไม่ค่อยได้ & copy; และเพื่อน ๆ. แน่นอน: & gt; สำหรับ> และ HTML-special อื่น ๆ ยังคงต้องมี Escape แต่ถึงแม้จะมีภาษาละติน -1 อื่น ๆ (เยอรมันฝรั่งเศส ฯลฯ ) การเขียนก็เป็นเรื่องน่าปวดหัวเมื่อคุณรู้ว่า ...

นอกจากนี้ฉันเองยังเขียนเอนทิตีสำหรับอักขระที่มองไม่เห็นและสิ่งที่มีลักษณะคล้ายกับมาตรฐาน-ascii ดังนั้นจึงสับสนได้ง่าย ตัวอย่างเช่นมี u1173 (ดูเหมือนเส้นประในชุดอักขระบางชุด) หรือ u1175 ซึ่งดูเหมือนแถบแนวตั้ง ฉันจะใช้เอนทิตีสำหรับสิ่งเหล่านั้นไม่ว่าในกรณีใด ๆ


& gt; ไม่จำเป็นสำหรับ> คุณสามารถใช้> & lt; จำเป็นสำหรับ <แม้ว่า
Codemonkey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.