HTML Tokenizzatore

HTML Tokenizer

Il tokenizer è la prima fase dell’analisi HTML: converte il testo markup in un flusso di token definiti dallo standard. È API pubblico, quindi gli strumenti che si occupano di token piuttosto che di alberi — linters, sanitizer pre-passes, syntax highlighters — possono consumare direttamente il flusso.


Tokenizzare il markup

Tokenizer.tokenize() elabora l’input completo; Tokenizer.tokenize_fragment() applica le regole di tokenizzazione dei frammenti. Entrambi emettono il vocabolario standard dei token.

Classi di token

Ogni token è un oggetto tipizzato: StartTagToken e EndTagToken per i tag (con attributi), CharacterToken per il testo, CommentToken, DoctypeToken e EofToken che segnalano la fine dell’input.

Stati del tokenizer

TokenizerState modella la macchina a stati degli standard — gli stessi stati che la specifica nomina — e Tokenizer.set_state() consente a chiamanti frammento e sensibili al contesto di avviare nello stato corretto.

Riferimenti di carattere

I riferimenti di carattere nominati e numerici vengono risolti tramite resolve_named_char_ref(), resolve_numeric_char_ref() e find_named_char_ref_match() — la tabella completa dei riferimenti nominati, non un sottoinsieme abbreviato.


Suggerimenti e migliori pratiche

  • Usa tokenize_fragment() con lo stato iniziale corretto quando tokenizzi contenuti che apparirebbero all’interno di un elemento specifico
  • Considera EofToken come segnale di fine definitivo anziché esaurire l’iteratore tramite eccezione
  • Per i sanitizzatori, ispeziona gli attributi StartTagToken a livello di token prima che venga costruito qualsiasi albero

Problemi comuni

ProblemaCauseCorrezione
Il contenuto script/style viene tokenizzato come markupStato iniziale errato per il contestoImposta il TokenizerState appropriato tramite set_state()
Le entità appaiono non risolteConsumo di testo grezzo senza risoluzione dei riferimentiUsa le funzioni di risoluzione char-ref
L’output del frammento differisce dall’analisi completaLe regole del frammento differiscono intenzionalmenteUsa tokenize() per i documenti completi

FAQ

Posso usare il tokenizer senza costruire un albero?

Sì — il flusso di token è un output pubblico e autonomo.

Gli stati del tokenizer sono quelli standard?

TokenizerState rispecchia la macchina a stati della specifica ed è configurabile tramite set_state().

Come vengono gestiti i riferimenti di carattere nominati?

Attraverso resolve_named_char_ref() e find_named_char_ref_match() rispetto alla tabella completa dei riferimenti nominati.


API Reference Riepilogo

Classe/MetodoDescrizione
Tokenizer.tokenizeTokenizza l’input completo
Tokenizer.tokenize_fragmentTokenizza con regole di frammento
Tokenizer.set_stateImposta lo stato iniziale del tokenizzatore
StartTagTokenToken di tag di apertura con attributi
TokenizerStateStati della macchina a stati degli standard
resolve_named_char_refRisolvi un riferimento di carattere denominato

Vedi anche

 Italiano