3. ABNF
3. ABNF
L'ABNF [RFC5234] della codifica testuale è:
textualmsg = preeb *WSP eol
*eolWSP
base64text
posteb *WSP [eol]
preeb = "-----BEGIN " label "-----" ; a differenza dell'(A)BNF di [RFC1421],
; eol non è richiesto (ma
posteb = "-----END " label "-----" ; vedi [RFC1421], Sezione 4.4)
base64char = ALPHA / DIGIT / "+" / "/"
base64pad = "="
base64line = 1*base64char *WSP eol
base64finl = *base64char (base64pad *WSP eol base64pad /
*2base64pad) *WSP eol
; ...AB= <EOL> = <EOL> non è buono, ma è valido
base64text = *base64line base64finl
; potremmo anche usare <encbinbody> da RFC 1421, che richiede
; 16 gruppi di 4 caratteri, il che significa esattamente 64 caratteri per
; riga, tranne l'ultima riga, ma questo è più accurato
labelchar = %x21-2C / %x2E-7E ; qualsiasi carattere stampabile,
; tranne il trattino
label = [ labelchar *( ["-" / SP] labelchar ) ] ; vuoto ok
eol = CRLF / CR / LF
eolWSP = WSP / CR / LF ; confronta con LWSP
Figura 1: ABNF (Standard)
laxtextualmsg = *W preeb
laxbase64text
posteb *W
W = WSP / CR / LF / %x0B / %x0C ; whitespace
laxbase64text = *(W / base64char) [base64pad *W [base64pad *W]]
Figura 2: ABNF (Lax)
stricttextualmsg = preeb eol
strictbase64text
posteb eol
strictbase64finl = *15(4base64char) (4base64char / 3base64char
base64pad / 2base64char 2base64pad) eol
base64fullline = 64base64char eol
strictbase64text = *base64fullline strictbase64finl
Figura 3: ABNF (Strict)
Le nuove implementazioni DOVREBBERO emettere il formato rigoroso (strict) (Figura 3) specificato sopra. La scelta della strategia di analisi dipende dal contesto d'uso.