Headers already sent - Ecnodage UTF-8 ?

Résolu
MHH225 Messages postés 529 Date d'inscription   Statut Membre Dernière intervention   -  
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   -
Salut !

J'ai un gros problème depuis que j'ai changé l'encodage de mes pages PHP : je codais en ANSI jusqu'à ce qu'une fausse manipulation ne me contraigne à convertir toute mes pages en UTF-8. Depuis, lorsque j'ouvre mon site, le navigateur me dit :
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at [...]/index.php:1) in [...]/includes/config.php on line 183

Mes pages se configurent ainsi :
<?php
include('configuration.php'); //Qui contient de nombreuses configurations ainsi que la connexion à la bdd et session_start()
include('haut.php'); //Qui contient l'en-tête, le menu, ...
?>
<div id="corps">
<!--corps de la page-->
<?php
include('bas.php');
?>

La ligne 1 est donc "<?php"

Donc si vous avez une idée, merci d'avance ;)
A voir également:

9 réponses

avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Il y a sans doute un caractère unicode, invisible mais bien présent.
Essayes en plaçant ton curseur après "<", appuyes sur la flèche "gauche", puis appuyes quelques fois sur la touche "Supprimer"
0
totofrancois Messages postés 398 Date d'inscription   Statut Membre Dernière intervention   44
 
bonjour,

si tu fais des header("encoding ....") ce dois être la première fonction appelé par ton php, c'est peut-être simplement l'ordre de tes appels qu'il faut changer.
0
MHH225 Messages postés 529 Date d'inscription   Statut Membre Dernière intervention   46
 
Salut totofrancois. Je ne vois pas très bien ce que tu veux dire par header php... Je ne fait simplement que les headers classique en HTML, entre les balises <head>.

Par contre, @avion-f16, merci de ton idée ! Je n'ai pas réussi à supprimer quoi que ce soit d'invisible dans mes pages, mais en changeant le type d'affichage sur mon navigateur (qui affiche donc du ANSI au lieu du UTF-8) j'ai découvert qu'effectivement il y avait des caractères avant le message d'erreur (  pour être précis ;) ) ! Après le problème est de les enlever...
Je vais faire des tests en réecrivant une petite page, voir si le problème est lié à la conversion ou, si c'est un autre problème. Je vous tiens informé ;)
0
MHH225 Messages postés 529 Date d'inscription   Statut Membre Dernière intervention   46
 
Bon donc le problème persiste même avec une page fraichement crée en UTF-8. Evidemment, avec une page en ANSI, aucun problème. Un détail que je n'avait pas pensé à vérifier, c'est que lorsque je teste en local, il n'y a aucun problème... Donc je vais jeter un petit coup d'oeil sur le site de Free, voir s'il y a quelque chose que je puisse régler. [EDIT] Comme je m'y attendais, rien à esperer de ce côté là...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Le caractère unicode dont je te parles est en fait un "byte order mark (BOM)".
Regarde ici.
0
MHH225 Messages postés 529 Date d'inscription   Statut Membre Dernière intervention   46
 
Merci pour ta réponse, je viens justement de ragarder sur Internet et j'ai testé pendant que tu postais, et lorsque j'enregistre sans les BOM, ca marche !! :D Merci beaucoup !!
0
totofrancois Messages postés 398 Date d'inscription   Statut Membre Dernière intervention   44
 
du coup essai de rajouter au début de ton fichier :

<?php
header("encoding : utf-8");
?>
0
MHH225 Messages postés 529 Date d'inscription   Statut Membre Dernière intervention   46
 
Donc pour résumer, mon navigateur, ou je ne sais quoi, interprétait la balise BOM comme un caractère, et envoyait donc des informations à la page (d'où le message 'Headers already sent'). Pour enlever cette balise BOM (inutile en UTF-8) il faut la supprimer au moyen de son éditeur de texte (sur Notepad++ : "Format" -> "Convertir en UTF-8 (sans BOM)")

Merci à tous les deux !

PS :Quelques infos sur les BOM
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
C'est le serveur.
Avant d'envoyer ta page, le serveur envoyer les entêtes HTTP au navigateur. Ces entêtes contiennent plusieurs informations. Elles sont envoyées avant le premier caractères. Ici, le caractère BOM pose problème car le serveur doit l'envoyer au navigateur, donc il envoie les entête avant. Et après, dans ton script PHP, tu demandes à modifier les entêtes, ce qui est impossible une fois qu'elles sont envoyées.
0
MHH225 Messages postés 529 Date d'inscription   Statut Membre Dernière intervention   46
 
Merci pour la précision ;)
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
:-)
C'est pour ça que :
Cannot send session cache limiter - headers already sent
0