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
EofTokencome segnale di fine definitivo anziché esaurire l’iteratore tramite eccezione - Per i sanitizzatori, ispeziona gli attributi
StartTagTokena livello di token prima che venga costruito qualsiasi albero
Problemi comuni
| Problema | Cause | Correzione |
|---|---|---|
| Il contenuto script/style viene tokenizzato come markup | Stato iniziale errato per il contesto | Imposta il TokenizerState appropriato tramite set_state() |
| Le entità appaiono non risolte | Consumo di testo grezzo senza risoluzione dei riferimenti | Usa le funzioni di risoluzione char-ref |
| L’output del frammento differisce dall’analisi completa | Le regole del frammento differiscono intenzionalmente | Usa 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/Metodo | Descrizione |
|---|---|
Tokenizer.tokenize | Tokenizza l’input completo |
Tokenizer.tokenize_fragment | Tokenizza con regole di frammento |
Tokenizer.set_state | Imposta lo stato iniziale del tokenizzatore |
StartTagToken | Token di tag di apertura con attributi |
TokenizerState | Stati della macchina a stati degli standard |
resolve_named_char_ref | Risolvi un riferimento di carattere denominato |