2 votes

Que signifient [CFWS] et [FWS] dans cet ABNF?

Le RFC 2282 pour les e-mails a le ABNF suivant pour les quoted-string.

quoted-string   =       [CFWS]
                        DQUOTE *([FWS] qcontent) [FWS] DQUOTE
                        [CFWS]

J'ai googlé et trouvé que CFWS est Commentaires, Folding, Espaces blancs. Je sais ce que sont les espaces blancs mais je ne sais pas ce que sont les commentaires et le folding en termes de ABNF dans une adresse e-mail.

Aussi, que signifie [FWS] à l'intérieur de *()? Les guillemets peuvent avoir 0 ou plusieurs occurrences de qcontent précédées par Folding et espaces blancs?

C'est très confus. Des références pour comprendre ABNF seraient grandement appréciées.

3voto

Mark Amery Points 4705

Ce n'est pas une partie de la syntaxe ABNF générique (actuellement définie dans RFC 5234, bien que RFC 2234 était la définition de l'ABNF en vigueur au moment où le RFC 2282 a été rédigé). Au lieu de cela, FWS et CFWS sont des jetons spéciaux définis dans le RFC lui-même (voir section 3.2.3 du RFC 2822, ou section 3.2.2 du RFC 5322, qui a obsolète le RFC 2822 en 2008).

Depuis le RFC 5322:

2.2.3. Champs d'entête longs

Chaque champ d'en-tête est logiquement une seule ligne de caractères comprenant le nom du champ, les deux-points, et le corps du champ. Pour des raisons de commodité et pour traiter les limitations de caractères 998/78 par ligne, la partie corps du champ d'un en-tête peut être divisée en une représentation multi-lignes; ceci est appelé "pliage". La règle générale est que partout où cette spécification permet le pliage de l'espace blanc (pas seulement les caractères WSP), un CRLF peut être inséré avant tout WSP.

Par exemple, le champ d'en-tête:

Sujet: Ceci est un test

peut être représenté comme suit:

Sujet: Ceci
 est un test

...

Le processus de passage de cette représentation multiple pliée d'un champ d'en-tête à sa représentation en une seule ligne est appelé "dépliage". Le dépliage est réalisé en supprimant simplement tout CRLF immédiatement suivi d'un WSP. Chaque champ d'en-tête doit être traité dans sa forme dépliée pour une évaluation syntaxique et sémantique ultérieure. Un champ d'en-tête déplié n'a pas de restriction de longueur et peut donc être indéfiniment long.

...

3.2.2. Espace blanc plié et commentaires

Les caractères d'espace blanc, y compris l'espace blanc utilisé dans le pliage (décrit dans section 2.2.3), peuvent apparaître entre de nombreux éléments dans les corps de champ d'en-tête. De plus, des chaînes de caractères qui sont traitées comme des commentaires peuvent être incluses dans des corps de champ structurés en tant que caractères inclus dans des parenthèses. Ce qui suit définit l'espace blanc plié (FWS) et les constructions de commentaires.

Les chaînes de caractères incluses entre des parenthèses sont considérées comme des commentaires tant qu'elles n'apparaissent pas dans une "chaîne entre guillemets", comme définie dans section 3.2.4. Les commentaires peuvent être imbriqués.

Il existe plusieurs endroits dans cette spécification où des commentaires et FWS peuvent être facilement insérés. Pour accommoder cette syntaxe, un jeton supplémentaire pour "CFWS" est défini pour les endroits où des commentaires et/ou FWS peuvent apparaître. Cependant, là où CFWS apparaît dans cette spécification, IL NE DOIT PAS être inséré de manière à ce que toute ligne d'un champ d'en-tête replié soit entièrement composée de caractères WSP et rien d'autre.

FWS             =   ([*WSP CRLF] 1*WSP) /  obs-FWS
                                       ; Folding white space

ctext           =   %d33-39 /          ; US-ASCII imprimable
                    %d42-91 /          ;  caractères n'incluant pas
                    %d93-126 /         ;  "(", ")", ou "\"
                    obs-ctext

ccontent        =   ctext / quoted-pair / comment

comment         =   "(" *([FWS] ccontent) [FWS] ")"

CFWS            =   (1*([FWS] comment) [FWS]) / FWS

Tout au long de cette spécification, lorsque FWS (le jeton de l'espace blanc plié) apparaît, cela indique un endroit où le pliage, tel que discuté dans section 2.2.3, peut avoir lieu. Chaque fois que le pliage apparaît dans un message (c'est-à-dire, un corps de champ d'en-tête contenant un CRLF suivi de tout WSP), un dépliage (suppression du CRLF) est effectué avant toute analyse sémantique supplémentaire sur ce champ d'en-tête conformément à cette spécification. Autrement dit, tout CRLF qui apparaît dans FWS est "invisible" sémantiquement.

Un commentaire est généralement utilisé dans un corps de champ structuré pour fournir un texte informatif lisible par l'homme. Comme un commentaire est autorisé à contenir FWS, le pliage est autorisé à l'intérieur du commentaire. Notez également que puisque quoted-pair est autorisé dans un commentaire, les caractères de parenthèses et de barre oblique inversée peuvent apparaître dans un commentaire, tant qu'ils apparaissent comme un quoted-pair. Sémantiquement, les parenthèses d'encadrement ne font pas partie du commentaire; le commentaire est ce qui est contenu entre les deux parenthèses. Comme indiqué précédemment, le "\" dans tout quoted-pair et le CRLF dans tout FWS qui apparaît dans le commentaire sont "invisibles" sémantiquement et ne font donc pas partie du commentaire non plus.

Les séquences de FWS, de commentaires, ou de CFWS qui apparaissent entre des jetons lexicaux dans un champ d'en-tête structuré sont interprétées sémantiquement comme un seul caractère d'espace.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X