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
		(
			'&amp;', '&#039;', '&quot;', '&lt;', '&gt;'
		), $string);
}

Apostrof jest traktowany specjalnie, bo w HTML go… nie przewidzieli.

Technorati Tags: , , , ,