begin process at 2012 05 31 09:31:56
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Server Web

 > 

Autre

 > 

Server : Charset ? Header() ? .htacces ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Server : Charset ? Header() ? .htacces ?

samedi 13 février 2010 à 14:02:50 | Server : Charset ? Header() ? .htacces ?

maximelien

Membre Club
Bonjour,

Cela fait plusieurs jours que je m'arrache les cheveux sur un problème que je rencontre sur mon hébergement.

J'ai développer un sondage web sur Easy PHP -> Tout marche très bien.

J'ai migré vers mon hébergeur et la j'ai beaucoup de problèmes notamment sur l'interprétation des fichiers par le serveur : les caractères ne s'affichent pas correctement et header() de PHP fonctionne sur les pages d'un sous dossier mais pas sur celle de l'index principal.

J'ai par moment une même page qui s'affiche correctement dans un type de codage et a d'autre moment elle s'affiche n'importe comment -> lorsque je remplace successivement un même dossier. A noter que c'est indépendant de si je rafraichi ou arrive sur la page pour la "première fois".

Hors-mi ce problème là, ce qui m'embête le plus c'est que sur certaines pages la fonction PHP header(); fonctionne très bien et sur l'index principal je me retrouve à tout les coups dans le exit("");

Bout de code de l'index principal -> redirection via header()
Code PHP :
   
<?php    
//Start Session, controle and references
 session_start();

    if ( isset($_POST)&&(isset($_POST['Langue'])))
      {
         extract($_POST);  // Variable extraction of the global post table
         $_SESSION['ip_addr']=$_SERVER['REMOTE_ADDR'];
         $_SESSION['langue']=$Langue;

         if($_SESSION['langue']=='Français')
         {
             header('Location: ./francais/index.php');
             exit('Erreur de chargement du questionnaire en '.$_SESSION['langue']);
         }
         else if($_SESSION['langue']=="English")
         {
             header('Location: ./english/index.php');
             exit('Loading error for the '.$_SESSION['langue'].' survey');
         }
      }
  ?>


J'ai donc vérifié ce code mais rien d'anormal à priori... Et cela ne peut pas être le contrôle Français (où il va falloir que je force la value dans le select de mon code html à francais afin de limiter les problèmes) car je me retrouve dans le Exit => le if fonctionne bien. De plus je n'affiche rien sur le document avant l'appel de header() (ce qui aurait pu tout expliquer) à moins que le extract écrive lui..?

J'ai donc déduit que c'est à un problème de codage que j'ai à faire...
J'ai tenté de déclarer le Charset ( : <?xml : ?>/ <meta :>), j'ai encodé mes pages en Unicode et en DOS (sous context, bien que je ne sais pas ce qu'ils entendent pas DOS=iso-8859-1? Latin-1? CP1252?).
Mais rien à faire...

C'est un hébergeur payant et plutôt bien réputé, donc je ne penses pas que l'erreur vienne d'eux (sauf s'ils ont imposé des limites pour la sécurité, mais dans ce cas le header() ne marcherait pas dans les pages php du sous-dossier). Quoi qu'il en soit je leur ai quand même écrit et attends leur réponse. A ajouter que dans ma session ftp je peux modifier le dossier log propre à mon hébergement.

Bref, avez vous des idées de solution à mon/mes problèmes ?
Savez vous comment identifier l'encodage d'un fichier sous windows ? (puisque rebooter sous linux à chaque fois risque d'être laborieux)
Savez vous quelle peut être mon erreur dans le code php ?


Merci d'avance pour toute réponse car là je suis vraiment bloqué...

A bientot.
dimanche 14 février 2010 à 12:08:39 | Re : Server : Charset ? Header() ? .htacces ?

TychoBrahe

Salut,

Quelques petites remarques :

les caractères ne s'affichent pas correctement


Essaye de commencer tes pages par header('Content-Type: text/html; charset=utf-8'); en remplaçant utf-8 par ton encodage bien entendu.

extract($_POST);


C'est à proscrire. Je t'invite à lire l'avertissement mis dans la documentation de PHP.

sur certaines pages la fonction PHP header(); fonctionne très bien et sur l'index principal je me retrouve à tout les coups dans le exit("");


header() n'interrompt pas le flux d'exécution, tu tombera toujours sur la ligne suivante. La plupart du temps c'est invisible vu que ton navigateur change de page immédiatement après avoir reçu le header lui demandant d'en changer, mais la suite est bien exécutée, d'où l'intéret du exit() afin d'empêcher que la suite en soit exécutée.

Après pour ce qui est de ton soucis de header dans les pages situées dans un sosu dossier je n'ai pas très bien compris ton problème.
dimanche 14 février 2010 à 14:34:14 | Re : Server : Charset ? Header() ? .htacces ?

maximelien

Membre Club
Merci TychoBrahe,

Je vais essayer tout ça dès que possible.
dimanche 14 février 2010 à 14:35:22 | Re : Server : Charset ? Header() ? .htacces ?

kohntark

Membre Club
Salut,

Code PHP :
isset($_POST)

=> il me semble que c'est inutile, $_POST étant une superglobale toujours accessible
(je sais, ça ne règle pas ton pb )

Tu n'es pas assez précis sur ton pb :
lorsque tu dis "je me retrouve à tout les coups dans le exit(""); " duquel parles tu ?
une des redirections fonctionne t elle ou restes tu sur un des messages des exit() ?

Pour lever le doute sur l'encodage tu devrais peut être faire un :
echo $_SESSION['langue'];
et voir du côté de mb_detect_encoding et du php.ini

Cordialement,

Kohntark -

dimanche 14 février 2010 à 17:13:59 | Re : Server : Charset ? Header() ? .htacces ?

maximelien

Membre Club
=>

TychoBrahe



Après pour ce qui est de ton soucis de header dans les pages situées dans un sosu dossier je n'ai pas très bien compris ton problème.



En fait ce que je disais, c'est que dans les sous-dossiers la redirection fonctionne correctement.

L'arboressence est la suivante : (description des dossiers typée XML pour être plus clair)

Code XML :
<sondage>
         index.php
         <francais>index.php, etape2.php, etape3.php, ...</francais>
         <english>index.ph, ...</english>
</sondage>


Donc pour clarifier (dans le cas d'un sondage en francais seulement, puisque ce sera le même en traduit pour la version englaise qui viendra plutard) :

  • les redirections de <francais>index.php</francais> vers <francais>etape2.php</francais> ou de <francais>index.php</francais> vers <sondage>index.php</sondage> fonctionnent bien.
  • Mais pas la redirection de <sondage>index.php</sondage> vers <francais>index.php</francais> ne fonctionne pas.


Essaye de commencer tes pages par header('Content-Type: text/html; charset=utf-8'); en remplaçant utf-8 par ton encodage bien entendu.




(1*)J'ai encodé le code sous ConTEXT en unicode, donc à priori c'est bien du UTF-8, j'ai posé le header et j'ai supprimé le extract en adressant directement de $_POST[]. Je l'ai fait tourner sous EasyPHP et j'ai retrouvé le même problème que sur le server. Ce qui confirme donc que l'erreur vient à priori de moi. Voici ce que j'ai constaté :

(1*=>)EasyPHP n'interprete plus le code comme il faut : les CSS ne fonctionnent plus et le bout de code PHP (que j'ai ajouté pour suivre la variable) dans la page s'affiche tel quel ou presque (le code en question ci-dessous :)

<?php echo "</br></br></br></br>".$_SESSION['langue']; ?>


et ce qui s'affiche est quelque chose comme ce qui suit :
".$_SESSION['langue']; (il n'y a pas tout le code php, seulement la fin)

(2*)Ensuite lorsque je met en commentaire les modifications la page s'affiche n'importe comment (une sorte de chinois, japonais, sumérien... plein d'idéogrammes exotiques quoi).

La je viens de supprimer la mise en commentaire et rétablit le code comme en (1*) et la page s'affiche correctement hors-mi les caractères accentués qui s'affichent sous la fameuse forme <?> (propre à linux de mémoire).

Bref, trois choses :


  • Comment être sur de l'encodage du texte ? (là, pour le cas d'une page php, en lisant le poste de kohntark je viens d'avoir une réponse) Où dans windows peut on vérifier l'encodage d'un fichier texte ?

  • Le codage des caractères spéciaux sous la forme : &#NNNN; est elle obligatoire ? Car en effet je n'ai pas codé mes caractères spéciaux avec cette notation et pourtant tout marchait bien jusqu'alors.

  • Les déclarations de codage sont elles enregistrées par le serveur (ou EasyPHP en l'occurrence) ? Comment cela se passe t-il ? Le serveur identifie l'encodage et lorsque l'on déclare l'encodage, il enregistre ce changement. Si on supprime cette déclaration, l'interprétation de l'encodage ne change pas pour le serveur ?


=>

kohntark



lorsque tu dis "je me retrouve à tout les coups dans le exit(""); " duquel parles tu ?
une des redirections fonctionne t elle ou restes tu sur un des messages des exit() ?



En fait dans les deux cas. Mais pour l'instant je me concentre surtout sur le cas du Français. Aucune des deux redirections ne fonctionnent.

Pour lever le doute sur l'encodage tu devrais peut être faire un :
echo $_SESSION['langue'];



Justement c'est ce que j'ai fait, dans le cas initial sur EasyPHP comme sur le serveur de l'hébergeur cela s'affiche correctement : avec le "ç".

En revanche dès que je spécifie l'encodage plus rien ne vas (Cf la description plus haut (1*)

mb_detect_encoding et du php.ini



Très pratique : mb_detect_encoding() => UTF-8. (En revanche je ne comprends pas pourquoi il faut absolument y passer un argument $str puisque l'utilisation la plus courante doit être déterminer l'encodage de la page..? )

Très intéressant le php.ini, il me semble l'avoir déjà utilisé il y a longtemps... Je pense effectivement que j'ai intérêt à y faire un saut sous peu.

=> A priori je me retrouve maintenant sur easy php dans la même configuration que sur le serveur (lorsque j'avais fait la déclaration UTF, non pas via header, mais dans le <xml> et le <html>) et dans ce cas la redirection ne marchait toujours pas. Je vais continuer à chercher, notamment dans la direction du php.ini ...

Merci encore pour vos réponses.
dimanche 14 février 2010 à 21:14:08 | Re : Server : Charset ? Header() ? .htacces ?

maximelien

Membre Club
Juste une chose, comment tu modifies le php.ini si tu n'as pas accès au fichier : mon hébergement est partagé, par conséquent j'ai juste possibilité de consulter un info.php qui me donne ce qui est activé et ce qui ne l'est pas. J'ai rien trouvé sur le header(). Y a il moyen de modifier et consulter le php.ini d'une autre façon ?

Sinon, une autre question me vient : comment vérifier que l'encodage d'un texte ne comporte pas d'erreur ?
lundi 15 février 2010 à 11:29:16 | Re : Server : Charset ? Header() ? .htacces ?

maximelien

Membre Club
Je suis allé faire un tour sur d'autre topic en espérant y apporter des réponses mais en testant un code j'ai remarqué que l'affichage était aussi incohérent que ceux de mes codes :

code :

Code PHP :
<?php header('Content-Type: text/html; charset=utf-8'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Document sans titre</title>
  </head>
  
  <body>
    <form id="aaa" name="form1" method="post" action="ess_bout.php">
    <input type="submit" name="button2008" id="bu" value="2008" />
    </form>
    
    
    <?php
    if(isset($_POST['button2008']))
    {
    echo 'ok '.'<BR>';
    $champ = $_POST['button2008'];
    echo $champ;
    }
    else
    {
    echo 'nok '.'<BR>';
    $champ = $_POST['button2008'];
    echo $champ;
    }
    
    ?>
  </body>
</html>


affichage (sous FireFox) :

<affichage du bouton 2008>
'; $champ = $_POST['button2008']; echo $champ; } else { echo 'nok '.'
'; $champ = $_POST['button2008']; echo $champ; } ?>


lundi 15 février 2010 à 11:59:26 | Re : Server : Charset ? Header() ? .htacces ?

maximelien

Membre Club
J'ai ré-encodé avec notepad++ qui a identifié l'encodage en UTF-16. Je l'ai donc encodé en UTF8 et tout fonctionne... En bref, conTEXT c'est bien mais c'est pas encore ca...

Je vérifie pour le problème principal que c'est bien la solution.
lundi 15 février 2010 à 12:04:11 | Re : Server : Charset ? Header() ? .htacces ?

maximelien

Membre Club
A priori ca ne résout pas le problème de la redirection.
dimanche 14 mars 2010 à 13:25:30 | Re : Server : Charset ? Header() ? .htacces ?

maximelien

Membre Club
J'ai finalement trouvé quelques temps après, je prend le temps de vous donner la réponse au problème :

Mon hébergement ne lisait pas correctement les fichiers UTF-8 avec BOM.

Par conséquent dès que j'utilisais un header ou une session (via Cookies), leur interpretation étant équivalente à une écriture (invisible) du BOM , ceci fermait l'entête HTTP et empêchait l'utilisation des fonction précités.

La solution : utiliser un codage sans BOM (type UTF-8 sans BOM), ANSI (=ASCII), UTF8 as ANSI ou type DOS [noms donnés par les éditeurs de texte].

En bref, c'était un problème de Char-set.


Cette discussion est classée dans : code, php, dossier, pages, header


Répondre à ce message

Sujets en rapport avec ce message

Une petite question sur les pages php [ par ian ] Faut-il toujours insérer le code php dans le body d'une page html qui a une extension .php, ou y-a-t-il un moyen de faire fonctionner une page de cod Problème de header [ par ehmarc ] Jai un code avec des header que j'utilise à deux endroits sur mon serveur sous exactement la meme forme (la seule différence c'est l'accès à la base d erreur avec la fonction header [ par hajeur_abd ] bonjourlors de l'execution de mon code :    header("location: libre.php?$code"); l'erreur suivant s'affiche:Warning: Cannot add header information - h javascript php [ par maciass ] slt svp quelqu un peut m aider pour resoudre ce problemej ai une variable php  $c  que je veux recuperer dans mon code javascript( j ai designé la pla Envoi de piece jointe telechargée via php [ par cendrillon84 ] Bonjour,J'ai un formulaire en flash qui télécharge via php un fichier(.doc ou .pdf) dans l'ordinateur de la personne remplissant le formulaire.Pour l' PHP - switch avec redirection [ par crisom ] bonjour, problème classique dont je n'ai pas trouvé la bonne reponse j'ai dans la page 1 ( avec un include ('haut.php'); pour avoir un head commun à d php variable et header [ par marine34000 ] Bonjour, J'ai déjà réussi a mettre des variables dans un header, mais la je ne comprend ps je n'y arrive plus j'ai un variable queje dois passer nor Probleme de header, message erreur "Cannot modify header information - headers already sent by..." [ par sebing ] Bonsoir, J'ai un message d'erreur qui apparait: [quote]Warning: Cannot modify header information - headers already sent by (output started at /mnt/159 header () [ par unbreton29 ] Bonjour, Je commence à m'arracher les cheveux, et personnellement, je préfèrerai les garder [^^langue3] Voici mon problème : j'ai un formulaire de Perte de session avec ie ??? [ par gfpl ] Bon voila le souci je peut le tourner comme je veut mais je ne trouve pas la solution .... j'essaie en vain mais non... la session marche avec chrome


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales