Znaki czy znaczniki?

Pytania

Istnieją takie znaki sterujące Unicode, które spełniają tę samą rolę jak znaczniki. Które należy stosować, a których należy unikać?

Odpowiedź

Odpowiedź zależy od tego, które znaki bierzemy pod uwagę. Szczegółowe informacje znajdziesz w notatce W3C i raporcie technicznym Unicode Unicode in XML & Other Markup Languages. Ten artykuł podsumowuje niektóre z informacji zawartych w tamtym dokumencie.

Niektóre znaki Unicode nie nadają się do użytku razem ze znacznikami

Następująca tabela podaje listę znaków, których (według Unicode in XML & Other Markup Languages) nie należy stosować w kontekscie znaczników. Zamiast tego powinieneś stosować znaczniki.

Nazwy/opis Komentarz
Separator wierszowy i akapitowy Używaj <br>, <p> itp.
Znaki sterujące osadzaniem bidi (LRE, RLE, LRO, RLO, PDF) Nie polecane gdzie istnieją znaczniki
Aktywować/wstrzymać symetryczną zamianę (np. nawiasów) Przestarzałe w Unicode
Aktywować/wstrzymać zmianę formy przy łączeniu znaków arabskich Przestarzałe w Unicode
Aktywować/wstrzymać narodową zmianę cyfr Przestarzałe w Unicode
Międzywierszowe znaki adnotacyjne Używaj znaczników ruby
BOM / ZWNBSP Używaj U+FEFF wyłącznie jako znacznik kolejności bajtów. Używaj U+2060 Word Joiner (łącznik słów) jako spację niełamiącą o zerowej szerokości zamiast U+FEFF
Znak zastąpienia obiektu Używaj znaczników, np. w HTML <object> lub <img>
Notacja muzyczna Używaj odpowiedniego języka znaczników
Kody znaków dla tagów językach Używaj atrybutu lang i/lub xml:lang

Szczególnie znaki sterujące osadzaniem dwukierunkowym często wprawiają w zakłopotanie. Są takie miejsca, gdzie trzeba ich używać, żeby uzyskać odpowiednio uporządkowany dwukierunkowy tekst w językach napisanych w pismach pisanych od prawej do lewej, jak pismo arabskie, hebrajskie, taana itp. Są to miejsca, gdzie pewien element nie pozwala na wewnętrze znaczniki, jak np. element title. Tam gdzie istnieją znaczniki, powinieneś ich używać. Szczegółowe informacje o tym znajdziesz w Unicode controls vs. markup for bidi support. Rekomendacje, jak stosować znaki sterujące osadzaniem w sytuacjach kiedy znaczniki nie mogą być użyte, znajdziesz w Using Unicode controls for bidi text.

Inne znaki Unicode są OK

Następująca lista nie jest zupełna. Znajdziesz w niej niektóre przykłady znaków Unicode, które nadają się do stosowania dodatkowo do znaczników, żeby dostarczyć informacji o tekscie.

Nazwy/opis Komentarz
Różne spacja niełamiąca (no-break space), miękki dywiz (soft hyphen), kombinujący łącznik grafemów (combining grapheme joiner), łącznik nierozdzielający (non breaking hyphen), łącznik słów (word joiner) itp.
Łączniki zerowej szerokości (rozdzielający i nierozdzielający, zero-width joiners, ZWJ i ZWNJ) np. niezbędne dla perskiego
Implicytne znaki kierunkowe (LRM i RLM)
Znaki formatowania popularne w pismach arabskim i syryjskim
Selektory wariantowe np. niezbędne dla pisma mongolskiego
Znaki opisu ideograficznego wskazują kompozycje ideogramów

Znaki kompatybilności różnią się w ich stosowalności

Wyciąg z Unicode in XML & Other Markup Languages:

Standard Unicode podaje mapę kompatybilności dla niektórych znaków. Mapy kompatybilności wskazują relację do innego znaku, ale dokładny charakter tego stosunku różni się. W niektórych przypadkach ten stosunek oznacza „bazuje na”, w innych przypadkach określa właściwość. Kiedy tekst zostaje oznaczony znacznikami, może mieć sens zmapowanie niektórych z tych znaków z ich kompatybilnymi odpowiednikami i odpowiednymi znacznikami. Ważnym jest rozumieć naturę różnic pomiędzy znakami i ich kompatybilnymi odpowiednikami oraz kontekst, w którym te różnice się liczą. Nie zaleca się stosować map kompatybilności bezkrytycznie.

Następująca tabela podaje niezupełną listę przykładów.

Nazwy/opis Przykłady Wniosek
Litery i liczby w okręgu używane jako punktory ① ② ③ Ⓐ Ⓑ Ⓒ ㊂ ㊃ ㊄ ㊓ ㊔ ㊕ ㋝ ㋞ ㋟ OK
Liczby w nawiasach lub z kropkami używane jako punktory ⑴ ⑵ ⑶ Używaj stylizacji punktorów
Arabskie formy prezentacji ﻉ ﻊ ﻋ ﻌ Normalizuj
Znaki o połowie szerokości i o pełnej szerokości ヤ ユ ヨ ラ a b c d OK
Indeksy górne i dolne ¹ ² ³ ₁ ₂ ₃ Używaj znaczników <sup> i <sub>