Headers already sent - Ecnodage UTF-8 ?

Résolu/Fermé
MHH225 Messages postés 529 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 10 juin 2012 - 3 janv. 2010 à 13:01
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 - 3 janv. 2010 à 15:43
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 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 500
3 janv. 2010 à 13:50
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 jeudi 19 novembre 2009 Statut Membre Dernière intervention 2 août 2013 44
3 janv. 2010 à 13:55
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 samedi 2 février 2008 Statut Membre Dernière intervention 10 juin 2012 46
3 janv. 2010 à 14:31
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 samedi 2 février 2008 Statut Membre Dernière intervention 10 juin 2012 46
3 janv. 2010 à 14:43
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 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 500
3 janv. 2010 à 14:46
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 samedi 2 février 2008 Statut Membre Dernière intervention 10 juin 2012 46
3 janv. 2010 à 14:48
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 jeudi 19 novembre 2009 Statut Membre Dernière intervention 2 août 2013 44
3 janv. 2010 à 14:47
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 samedi 2 février 2008 Statut Membre Dernière intervention 10 juin 2012 46
3 janv. 2010 à 14:59
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 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 500
3 janv. 2010 à 15:39
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 samedi 2 février 2008 Statut Membre Dernière intervention 10 juin 2012 46
3 janv. 2010 à 15:41
Merci pour la précision ;)
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 500
3 janv. 2010 à 15:43
:-)
C'est pour ça que :
Cannot send session cache limiter - headers already sent
0