Коли слід використовувати сутність HTML?


115

Це мене вже деякий час бентежить. З появою UTF-8 як фактичного стандарту в веб-розробці я не впевнений, у яких ситуаціях я повинен використовувати сутності HTML та в яких саме я повинен використовувати символ UTF-8. Наприклад,

  • em dash (-, &emdash;)
  • ampersand (&, &)
  • 3/4 дробу (¾, ¾)

Будь ласка, пролийте світло на це питання. Це буде оцінено.


Зі сторони, що робитимуть htmlentities () у PHP?
Джо Філіпс

Читаючи відповіді та коментарі, мені здається, ще немає універсального правила на користь того чи іншого, і відповідь все-таки залежить .
Маджід Фуладпур

Відповіді:


76

Зазвичай вам не потрібно використовувати об'єкти символів HTML, якщо ваш редактор підтримує Unicode. Організації можуть бути корисні, коли:

  • Ваша клавіатура не підтримує потрібний символ. Наприклад, на багатьох клавіатурах немає герма або символу авторського права.
  • Ваш редактор не підтримує Unicode (дуже поширений кілька років тому, але, мабуть, не сьогодні).
  • Ви хочете, щоб у джерелі було явно, що відбувається. Наприклад,  код чіткіший, ніж відповідний символ пробілу.
  • Вам потрібно бігти HTML спеціальні символи , такі як <, &або ".

1
Дуже корисний. Дякую. Я використовую корисну програму для отримання незвичайних персонажів. Він називається попчар і виготовлений Ергонісом, але призначений лише для ОС X.
allesklar

3
Побічна примітка: Вікіпедія все ще надає мандат &nbsp;замість фактичного символу пробілу, частково тому, що Firefox перетворює U + 00A0 у U + 0020 у формах. Тож використання сутності в цьому випадку є єдиним способом гарантувати, що джерело не заплутається кожного разу, коли користувач Firefox редагує його.
Joey

2
Хороший підсумок, але щодо останнього пункту, це те, <що часто потребує втечі, ніколи >"потрібно уникати рідко всередині значень атрибутів).
Jukka K. Korpela

Ще одна причина зберегти & nbsp; це так, що ви можете відображати кілька пробілів на HTML-сторінці.
zylstra

Так &amp;завжди слід використовувати замість &? Чи є для цього причина?
Прометей

116

Виходячи з отриманих коментарів, я детально розглядав це. Схоже, на даний момент найкращою практикою є відмовитися від використання HTML-сутностей та використовувати фактичний символ UTF-8 . Перелічені причини такі:

  1. Кодування UTF-8 легше читати та редагувати тим, хто розуміє, що означає символ і знає, як його набрати.
  2. Кодування UTF-8 настільки ж незрозумілі, як кодування HTML-сутності для тих, хто їх не розуміє, але вони мають перевагу в тому, що вони відображаються як спеціальні символи, а не важко зрозуміти десятковий або шістнадцятковий кодування.

Поки для кодування вашої сторінки правильно встановлено UTF-8, слід використовувати фактичний символ замість сутності HTML. Я прочитав кілька документів на цю тему, але найбільш корисними були:

З статті UTF-8: Секрет кодування символів :

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-елементи?
Джейкоб Форд

@JacobFord Правильно, змішування об'єктів HTML з символами UTF-8 не є ризиковим або недійсним, просто потенційно заплутає того, хто читає джерело.
Вільям Брендель

5

Я б не використовував UTF-8 для персонажів, які легко плутаються візуально. Наприклад, важко відрізнити емдаш від мінусу, або особливо нерозривний пробіл від простору. Для цих символів обов'язково використовуйте сутності.

Для персонажів, які легко зрозуміти візуально (наприклад, китайські приклади вище), продовжуйте та використовуйте UTF-8, якщо хочете.


5

Особисто я давно все роблю у utf-8, однак на сторінці html вам завжди потрібно конвертувати символи підсилення (&), більших ніж (>) та менших (<) символів, у їх еквівалентні об'єкти, & amp ;, & gt; і & lt;

Крім того, якщо ви збираєтесь робити якесь програмування, використовуючи текст utf-8, є кілька речей, на які слід дивитися.

  • XML потребує додаткових рядків для перевірки під час використання об'єктів.
  • Деякі бібліотеки не грають разом із utf-8. Наприклад, PHP в деяких дистрибутивах Linux відмовився від повної підтримки utf-8 у своїх бібліотеках регулярних виразів.
  • Важко обмежити кількість символів у тексті, який використовує html-сутності, оскільки одна сутність використовує багато символів. Також завжди є ризик скоротити підприємство навпіл.

Це дуже незначний момент, але не потрібно кодувати більше, ніж (>), лише менше (<).
Codemonkey

4

Організації можуть придбати вам сумісність із загиблими клієнтами, які не розуміють кодування правильно. Я не вірю, що це включає будь-які поточні веб-переглядачі, але ви ніколи не знаєте, які інші види програм можуть вражати вас.

Більш корисним є те, що суб'єкти HTML захищають вас від власних помилок: якщо ви неправильно налаштували щось на сервері, і ви в кінцевому підсумку обслуговуєте сторінку з заголовком HTTP, який говорить про це, ISO-8859-1і METAтегом, який говорить, що це UTF-8, принаймні, ваші & mdash; es завжди працюватиме.


5
Ви можете зробити протилежний аргумент, але якщо &mdashвідображається правильно, навіть якщо заголовки неправильно налаштовані, це ускладнює виявлення проблеми.
Pekka

4

Суб'єкти HTML корисні, коли ви хочете генерувати вміст, який буде (динамічно) включатися на сторінки з (кількома) різними кодуваннями. Наприклад, у нас є вміст білої етикетки, яка включена як у закодовані веб-сторінки ISO-8859-1, так і UTF-8 ...

Якщо перетворення набору символів з / в UTF-8 не було таким великим ненадійним безладом (ви завжди натрапляєте на деякі символи та деякі інструменти, які не конвертують належним чином), стандартизація UTF-8 була б дорогою.


2

Якщо ваші сторінки правильно закодовані у utf-8, у вас не повинно бути жодних html-об’єктів, просто використовуйте потрібні символи безпосередньо.


3
Я думаю, вам все одно знадобляться вони для кодування зарезервованих символів.
rmeador

@rmeador - я з цим згоден.
Otávio Décio

2

Усі попередні відповіді для мене мають сенс.

Крім того: це в основному залежить від редактора, який ви збираєтесь використовувати, та мови документа. Як мінімальна вимога до редактора - це підтримка мови документа. Це означає, що якщо ваш текст на японській мові, остерігайтеся використання редактора, який не відображає їх (тобто жодних сутностей для самого документа). Якщо його англійською мовою, ви навіть можете використовувати старий редактор, подібний до vim, та використовувати сутності лише для відносної рідкості та копіювання; і друзів. Звичайно: & gt; for> та інші HTML-спецзаписи все ще потребують скасування. Але навіть у інших латинських мовах (німецька, французька та ін.) Написання ä болить у тому, що ти знаєш, де ...

Крім того, я особисто пишу сутності для невидимих ​​символів та тих, які виглядають схожими на стандартні-ascii, і тому легко плутати. Наприклад, є u1173 (схожий на тире в деяких шаблонах) або u1175, який схожий на вертикальну смугу. Я б у будь-якому випадку використовував сутності для них.


& gt; НЕ потрібен для>, ви можете просто використовувати>. & lt; Однак потрібна для <.
Codemonkey
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.