HTML Tokenizer
HTML Tokenizer
Tokenizer-ul este prima etapă a parsării HTML: convertește textul markup într-un flux de tokenuri definite de standarde. Este public API, astfel încât instrumentele care se interesează de tokenuri mai degrabă decât de arbori — linters, pre-pasuri de sanitizare, evidențieri de sintaxă — pot consuma fluxul direct.
Tokenizarea markup
Tokenizer.tokenize() procesează intrarea completă; Tokenizer.tokenize_fragment() aplică regulile de tokenizare a fragmentelor. Ambele emit vocabularul standard de tokenuri.
Clase de tokenuri
Fiecare token este un obiect tipizat: StartTagToken și EndTagToken pentru etichete (cu atribute), CharacterToken pentru text, CommentToken, DoctypeToken și EofToken marcând sfârșitul intrării.
Stări ale Tokenizer-ului
TokenizerState modelează mașina de stare a standardelor — aceleași stări pe care le numește specificația — și Tokenizer.set_state() permite apelanților fragment și sensibili la context să înceapă în starea corectă.
Referințe de caractere
Referințele de caractere denumite și numerice se rezolvă prin resolve_named_char_ref(), resolve_numeric_char_ref() și find_named_char_ref_match() — tabelul complet de referințe denumite, nu un subset de scurtătură.
Sfaturi și bune practici
- Utilizați
tokenize_fragment()cu starea inițială corectă atunci când tokenizați conținut care ar apărea în interiorul unui element specific - Tratați
EofTokenca semnalul final definitiv, în loc să epuizați iteratorul prin excepție - Pentru sanitizatoare, inspectați atributele
StartTagTokenla nivel de token înainte de a se construi orice arbore
Probleme comune
| Problem | Cauză | Remediere |
|---|---|---|
| Conținutul script/style este tokenizat ca markup | Stare inițială incorectă pentru context | Setați TokenizerState corespunzător prin set_state() |
| Entitățile apar nerezolvate | Consumarea textului brut fără rezoluția referințelor | Utilizați funcțiile de rezolvare a referințelor de caractere |
| Ieșirea fragmentului diferă de analiza completă | Regulile fragmentului diferă intenționat | Folosiți tokenize() pentru documente complete |
FAQ
Pot folosi tokenizerul fără a construi un arbore?
Da — fluxul de tokenuri este o ieșire publică, independentă.
Stările tokenizerului sunt cele standard?
TokenizerState reflectă mașina de stări a specificației și poate fi setat prin set_state().
Cum sunt gestionate referințele de caractere numite?
Prin resolve_named_char_ref() și find_named_char_ref_match() în raport cu tabelul complet de referințe numite.
API Reference Rezumat
| Clasă/Metodă | Descriere: |
|---|---|
Tokenizer.tokenize | Tokenizați intrarea completă |
Tokenizer.tokenize_fragment | Tokenizați cu regulile fragmentului |
Tokenizer.set_state | Setează starea inițială a tokenizer-ului |
StartTagToken | Token de etichetă de început cu atribute |
TokenizerState | Stările mașinii de stări ale standardelor |
resolve_named_char_ref | Rezolvă o referință de caracter numită |