FluxBB.fr

Le site des utilisateurs francophones de FluxBB.

Recherche rapide

BOM - Caractères parasites  ou header already sent

Vous êtes confronté à la présence de caractères « parasites » sur une ou plusieurs pages HTML (générées par PHP), comme “” ou, la génération de vos pages donne une erreur du style Warning: Cannot modify header information - headers already sent by …

Il y a une très grande probabilité pour qu'un ou plusieurs de vos fichiers ait été sauvegardé avec une entête BOM, en anglais Byte Order Mark, qui est - théoriquement - utilisée comme marqueur pour indiquer que le texte est codé en UTF-8, UTF-16 ou UTF-32 et dans quel ordre sont les octets d'un caractère UTF-16 ou UTF-32.

Pour UTF-16, le BOM est une séquence de deux octets FE FF au début de la chaîne codée, pour indiquer que les caractères codés suivants utilisent l'ordre poids fort en dernier (big-endian) ; ou FF FE pour indiquer l'ordre poids faible en dernier (little-endian). Alors qu'UTF-8 n'a aucun problème d'ordre des octets, un BOM codé en UTF-8 peut être mis pour identifier un fichier comme UTF-8, mais ce n'est pas recommandé puisque ce BOM ne sert à rien, l'ordre des octets étant fixe en UTF-8.

Si on utilise un éditeur de texte (ou autre logiciel éditeur hexadécimal) qui permet de voir le fichier sous forme hexadécimale, c'est à dire avec une suite d'octets qui en représente le contenu, on peut voir si il y a des caractères supplémentaires (BOM) au début du fichier.

Par exemple, en vue héxadécimale, le début du fichier header.php normal est :

00000000 3C3F 7068 700D 0A2F 2A2A 2A2A 2A2A <?php../******
0000000E 2A2A 2A2A 2A2A 2A2A 2A2A 2A2A 2A2A **************
0000001C 2A2A 2A2A 2A2A 2A2A 2A2A 2A2A 2A2A **************

Le même fichier avec entête BOM est :

00000000 EFBB BF3C 3F70 6870 0D0A 2F2A 2A2A <?php../***
0000000E 2A2A 2A2A 2A2A 2A2A 2A2A 2A2A 2A2A **************
0000001C 2A2A 2A2A 2A2A 2A2A 2A2A 2A2A 2A2A **************

On voit bien que trois octets sont insérés au début du fichier : EF BB BF, c'est l'entête BOM. La plupart du temps, ces trois octets sont vus comme caractères : “” dans la fenêtre du navigateur ce qui permet de déterminer qu'il s'agit bien d'une entête BOM.

Il faut toujours vérifier, lorsque l'on sauvegarde un fichier modifié, que le logiciel donne une option “Sans BOM” ou que celle-ci fait partie des Réglages ou Préférences du logiciel.

Lorsque l'on édite/modifie un fichier, bien faire attention aux options ou préférences dudit logiciel :

  • Pas de transcodage automatique
  • Le fichier sauvegardé doit garder son codage d'origine, par exemple pas de transcodage automatique ASCII → UTF8
  • Pas d'ajout d'entête BOM si celle-ci n'existait pas

Faire aussi attention aux logiciels de téléchargement et de transfert de fichiers (FTP) qui ne doivent, en aucune manière, modifier quoi que ce soit.

Beaucoup de logiciels Windows (incluant Notepad) ajoutent un BOM aux fichiers UTF-8 si on n'y prend pas garde. C'est pourquoi il est recommandé d'utiliser Notepad++ (Gratuit : https://notepad-plus-plus.org/fr/) qui indique, en bas de page, dans la barre d'état, diverses informations dont le codage du fichier :

  • ANSI
  • ANSI as UTF-8 ou UTF-8 w/o BOM (C'est la version UTF-8 sans BOM)
  • UTF-8 (C'est la version UTF-8 avec BOM)
  • Selon les versions de Notepad++ les indications peuvent varier
  • UTF-8 Indique sans BOM
  • UTF-8 BOM Indique avec BOM
  • etc.

et qui permet, via le menu Encodage, de convertir d'un codage vers un autre.

Ainsi, si on se retrouve, sans le vouloir, avec les caractères “”, il suffit d'ouvrir, avec Notepad++ le fichier incriminé, de changer le codage via le menu Encodage ANSI pour FluxBB 1.2.x et ANSI as UTF-8 pour FluxBB 1.4, puis de sauvegarder le fichier modifié.

 
fluxbb_1_2/astuces/bom_-_caracteres_parasites_i_ou_header_already_sent.txt · Dernière modification: 2017/12/11 11:58 par Otomatic