Na prośbę Roya:
(X)HTML w skrócie definiuje dokument jako zestaw elementów. Każdy element to albo textNode
, albo kontener
— typowy element, jak nagłówek, paragraf, czy span
, który zawiera kolejne elementy.
Elementy są czasem błędnie nazywane tagami,
podczas gdy tagi to sposób tekstowego zapisu elementów — składają się wtedy z tagów otwierającego i zamykającego (albo jednego samozamykającego w przypadku elementów, które nie zawierają żadnych dzieci
).
Wszytkie elementy, poza tekstowymi, posiadają różne atrybuty. Te ostatnie zapisuje się jako listę par nazwa="wartość"
wewnątrz tagu otwierającego element. Teraz ważne: ponieważ HTML jest aplikacją SGML (trudne słowo), a XHTML jest aplikacją XML (jeszcze trudniejsze słowo), wartości atrybutów w zapisie trzeba cytować za pomocą encji.
Ponieważ HTML definiuje encji masę, a XHTML dziedziczy ich po XML tylko pięć, to cytować powinno się tylko te ostatnie (inaczej nie można przetwarzać wyniku jako dokumentu XML).
Oto więc lista kandydatów: &
, <
, >
, "
, '
.
Ponieważ w PHP funkcja html_entities
jest mocno nadgorliwa, poniżej prosta implementacja poprawnej alternatywy:
function xmlentities($string) { return str_replace(array ( '&', ''', '"', '<', '>' ), array ( '&', ''', '"', '<', '>' ), $string); }
Apostrof jest traktowany specjalnie, bo w HTML go… nie przewidzieli.