Kiedy należy używać encji HTML?

115

Od jakiegoś czasu mnie to wprawia w zakłopotanie. Wraz z pojawieniem się UTF-8 jako de facto standardu w tworzeniu stron internetowych nie jestem pewien, w jakich sytuacjach mam używać encji HTML, a do których powinienem używać po prostu znaku UTF-8. Na przykład,

  • myślnik (-, &emdash;)
  • ampersand (&, &)
  • 3/4 frakcji (¾, ¾)

Prosimy o wyjaśnienie tej kwestii. To będzie docenione.

allesklar
źródło
Na marginesie, co zrobi htmlentities () w PHP?
Joe Phillips
Czytając odpowiedzi i komentarze, wydaje mi się, że nie ma jeszcze uniwersalnej zasady na korzyść jednego lub drugiego, a odpowiedź nadal zależy .
Majid Fouladpour

Odpowiedzi:

76

Zwykle nie musisz używać encji znakowych HTML, jeśli twój edytor obsługuje Unicode. Podmioty mogą być przydatne, gdy:

  • Twoja klawiatura nie obsługuje znaku, który musisz wpisać. Na przykład wiele klawiatur nie ma kreski emulatora ani symbolu praw autorskich.
  • Twój edytor nie obsługuje Unicode (bardzo powszechne kilka lat temu, ale prawdopodobnie nie dzisiaj).
  • Chcesz, aby w źródle było jasne, co się dzieje. Na przykład  kod jest wyraźniejszy niż odpowiadający mu znak odstępu.
  • Musisz uciec HTML znaków specjalnych, takich jak <, &lub ".
JacquesB
źródło
1
Bardzo pomocne. Dzięki. Używam pomocnego programu, aby uzyskać niezwykłe postacie. Nazywa się popchar i jest produkowany przez Ergonis, ale jest przeznaczony tylko dla OS X.
allesklar
3
Uwaga boczna: Wikipedia nadal nakazuje &nbsp;zamiast rzeczywistych białych znaków, częściowo dlatego, że Firefox konwertuje U + 00A0 na U + 0020 w formularzach. Zatem użycie encji w tym przypadku jest jedynym sposobem na zapewnienie, że źródło nie zostanie zepsute za każdym razem, gdy użytkownik Firefoksa je edytuje.
Joey
2
Dobre podsumowanie, ale jeśli chodzi o ostatni punkt, to <często wymaga ucieczki, nigdy >(i "rzadko wymaga ucieczki wewnątrz wartości atrybutów).
Jukka K. Korpela
Kolejny powód, by zachować & nbsp; jest tak, że można wyświetlić wiele spacji na stronie HTML.
zylstra
Więc &amp;powinno być zawsze używane zamiast &? Czy jest tego powód?
Prometeusz
116

Na podstawie otrzymanych komentarzy przyjrzałem się temu nieco dokładniej. Wygląda na to, że obecnie najlepszą praktyką jest rezygnacja z używania encji HTML i użycie zamiast tego rzeczywistego znaku UTF-8 . Wymienione powody są następujące:

  1. Kodowania UTF-8 są łatwiejsze do odczytania i edycji dla tych, którzy rozumieją znaczenie znaku i wiedzą, jak go wpisać.
  2. Kodowania UTF-8 są tak samo niezrozumiałe jak kodowanie encji HTML dla tych, którzy ich nie rozumieją, ale mają tę zaletę, że renderują je jako znaki specjalne, a nie trudne do zrozumienia kodowania dziesiętne lub szesnastkowe.

Jeśli kodowanie Twojej strony jest poprawnie ustawione na UTF-8, powinieneś używać rzeczywistego znaku zamiast encji HTML. Przeczytałem kilka dokumentów na ten temat, ale najbardziej pomocne były:

Z artykułu UTF-8: The Secret of Character Encoding :

Wikipedia to świetne studium przypadku dla aplikacji, która pierwotnie korzystała z ISO-8859-1, ale przeszła na UTF-8, kiedy stała się zbyt uciążliwa do obsługi języków obcych. Boty będą teraz faktycznie przeglądać artykuły i konwertować jednostki postaci na odpowiadające im rzeczywiste postacie ze względu na łatwość obsługi i możliwość wyszukiwania .

Ten artykuł zawiera również dobry przykład dotyczący kodowania w języku chińskim. Oto przykład skrócony ze względu na lenistwo:

UTF-8:

這兩個字是甚麼意思

Jednostki HTML :

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

Kodowanie encji UTF-8 i HTML jest dla mnie bez znaczenia, ale przynajmniej kodowanie UTF-8 jest rozpoznawalne jako język obcy i będzie poprawnie renderowane w polu edycji. Artykuł mówi dalej o wersji zakodowanej w formacie HTML:

Niezwykle niewygodne dla tych z nas, którzy naprawdę wiedzą, czym są jednostki postaci, zupełnie niezrozumiałe dla biednych użytkowników, którzy tego nie robią! Nawet nieco bardziej przyjazne dla użytkownika, „zrozumiałe” jednostki znakowe, takie jak & theta; sprawi, że użytkownicy, którzy nie są zainteresowani nauką języka HTML, będą drapać się po głowach. Z drugiej strony, jeśli zobaczą θ w polu edycji, będą wiedzieć, że jest to znak specjalny i odpowiednio go potraktują, nawet jeśli sami nie wiedzą, jak napisać tę postać.

Jak zauważyli inni, nadal musisz używać encji HTML dla zarezerwowanych znaków XML (ampersand, mniej niż, większe niż).

William Brendel
źródło
Ta odpowiedź ogromnie pomaga. Ale żeby wyjaśnić, dla mojego własnego zrozumienia: nie ma nic ryzykownego ani nieprawidłowego w używaniu &entity;składni w dokumencie HTML z zadeklarowanym zestawem znaków UTF-8, prawda? Chociaż zwykłe znaki UTF-8 są lepsze z powodów, które wymieniłeś, nie ma problemu z posiadaniem niektórych jednostek HTML obok nich w tym samym dokumencie?
Jacob Ford
@JacobFord Dobrze, mieszanie encji HTML ze znakami UTF-8 nie jest ryzykowne ani nieprawidłowe, a jedynie może być mylące dla kogoś czytającego źródło.
William Brendel,
5

Nie użyłbym UTF-8 do znaków, które można łatwo pomylić wizualnie. Na przykład, trudno jest odróżnić emdash od minusa, a zwłaszcza nierozdzielającą spację od spacji. W przypadku tych postaci zdecydowanie używaj bytów.

W przypadku znaków, które są łatwo zrozumiałe wizualnie (takie jak powyższe chińskie przykłady), użyj UTF-8, jeśli chcesz.

Ned Batchelder
źródło
5

Osobiście robię wszystko w utf-8 od dłuższego czasu, jednak na stronie html zawsze musisz konwertować znaki ampersand (&), większe niż (>) i mniejsze niż (<) na ich odpowiedniki, & amp ;, & gt; i & lt;

Ponadto, jeśli zamierzasz programować przy użyciu tekstu utf-8, jest kilka rzeczy, na które należy zwrócić uwagę.

  • XML wymaga dodatkowych wierszy do sprawdzenia poprawności podczas używania jednostek.
  • Niektóre biblioteki nie współpracują dobrze z utf-8. Na przykład PHP w niektórych dystrybucjach Linuksa porzuciło pełne wsparcie dla utf-8 w swoich bibliotekach wyrażeń regularnych.
  • Trudniej jest ograniczyć liczbę znaków w tekście używającym encji html, ponieważ pojedyncza jednostka używa wielu znaków. Zawsze istnieje również ryzyko przecięcia istoty na pół.
Marco Luglio
źródło
To bardzo drobna kwestia, ale nie ma wymogu kodowania większego niż (>), tylko mniej niż (<).
Codemonkey
4

Podmioty mogą kupić ci pewną zgodność z martwymi klientami, którzy nie rozumieją poprawnie kodowania. Nie sądzę, aby obejmowało to jakiekolwiek obecne przeglądarki, ale nigdy nie wiadomo, jakie inne rodzaje programów mogą Cię uderzać.

Bardziej przydatne jest jednak to, że encje HTML chronią cię przed własnymi błędami: jeśli źle skonfigurujesz coś na serwerze i skończysz na wyświetlaniu strony z nagłówkiem HTTP, który mówi, że to, ISO-8859-1i METAtagiem, który mówi, że to UTF-8, przynajmniej twoje & mdash; es zawsze będzie działać.

Jim Puls
źródło
5
Możesz jednak podać argument przeciwny - wartości &mdashwyświetlane poprawnie, nawet jeśli nagłówki są źle skonfigurowane, utrudnia wykrycie problemu.
Pekka
4

Encje HTML są przydatne, gdy chcesz generować treść, która ma być umieszczana (dynamicznie) na stronach z (kilkoma) różnymi kodowaniami. Na przykład mamy treść z białymi etykietami, która jest zawarta zarówno na stronach internetowych zakodowanych w ISO-8859-1, jak i UTF-8 ...

Jeśli konwersja zestawu znaków z / do UTF-8 nie była tak dużym, zawodnym bałaganem (zawsze natkniesz się na niektóre postacie i niektóre narzędzia, które nie konwertują poprawnie), standaryzacja na UTF-8 byłaby właściwą drogą.

mjy
źródło
2

Jeśli Twoje strony są poprawnie zakodowane w utf-8, nie powinieneś potrzebować jednostek html, po prostu użyj bezpośrednio żądanych znaków.

Otávio Décio
źródło
3
Myślę, że nadal będziesz ich potrzebować do kodowania zarezerwowanych znaków.
rmeador
@rmeador - zgadzam się z tym.
Otávio Décio
2

Wszystkie poprzednie odpowiedzi mają dla mnie sens.

Ponadto: Zależy to głównie od edytora, którego zamierzasz używać, i języka dokumentu. Minimalnym wymaganiem dla redaktora jest obsługa języka dokumentu. Oznacza to, że jeśli twój tekst jest w języku japońskim, uważaj na używanie edytora, który ich nie wyświetla (tj. Nie ma elementów w samym dokumencie). Jeśli jest to angielski, możesz nawet użyć starego edytora podobnego do vim i używać encji tylko dla względnych rzadko & copy; i przyjaciele. Oczywiście: & gt; dla> i innych specjalnych HTML nadal potrzebuje znaków specjalnych. Ale nawet w przypadku innych języków łacińskich-1 (niemiecki, francuski itp.) Pisanie jest uciążliwe, bo wiesz, gdzie ...

Ponadto osobiście piszę encje dla niewidzialnych postaci i takich, które wyglądają podobnie do standardowego ascii i dlatego łatwo je pomylić. Na przykład istnieje u1173 (wyglądający jak myślnik w niektórych zestawach znaków) lub u1175, który wygląda jak pionowy pasek. W każdym razie użyłbym bytów do tych.

blabla999
źródło
& gt; NIE jest potrzebny do>, możesz po prostu użyć>. & lt; JEST jednak potrzebny dla <.
Codemonkey,