Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'affichage correct des accents

dans un formulaire en jQuery

Sujet résolu
    27 décembre 2010 à 19:01:23

    Bonjour,

    J'ai créé un formulaire, qui est validé en ajax, (Détails ici).

    Le problème c'est la gestion des accents, les accents sont remplacé par des caractères.
    Comment résoudre ça ?


    Page de formulaire:
    //**************SECURITE D'INFORMATION GET**********	  
    	if(isset($_GET['dest']))
    	{	  
    		$dest = (int) $_GET['dest'];
    	}
    	else
    	{
    		echo''.ERROR_URL.'';
    		exit;
    	}
    	//******************************************************	
       ?>
    
    	
    	<script type="text/javascript">
    	$(document).ready(function(){
    	$('#form1').submit(function() {
    		var str = $(this).serialize();
    		var select="./messageok.php?action=repondremp";
    		
    		$.ajax({
    			url: select,
    			data: str,		
    			async: true,
    			type: 'POST',
    			global: false,
    			cache: false, 
    			success: function(html){ 
    				$("#contenu").html(html);
    				}
                    });
    			return false;
    	});
    	});
    	</script>
    
    	
    	<form id="form1"> 
    	<p>
    	<label for="titre">Titre </label> <input type="text" size="80" id="titre" name="titre" />
    	</p>
    
    	<p>
    	<label for="titre">Message </label>
    	<textarea name="message" cols="60" rows="15"></textarea>
    	</p>
    	
    	<input type="hidden" name="dest" value="<?php echo''.$dest.''; ?>" />
    	
    	<input type="submit" value="Envoyer" style="width:500px; height:50px; margin-left:155px;" />
    	</form>
    



    Page de validation:
    <?php 
    if(isset($_GET['action']) && ($_GET['action'] == "repondremp")) 
    {
    	//**************SECURITE D'INFORMATION POST**********  
    	if (empty($_POST['message']) OR empty($_POST['titre']) OR empty($_POST['dest'])) 
    	{
    		echo''.ERROR_POST.'';
    		exit;
    	}
    	else
    	{
    		$message = htmlspecialchars(mysql_real_escape_string($_POST['message']));
    		$titre = htmlspecialchars(mysql_real_escape_string($_POST['titre']));
    		$dest = (int) $_POST['dest'];
    	}
    	//***************************************************
    
    	mysql_query("INSERT INTO forum_mp
    	(mp_id, mp_expediteur, mp_receveur, mp_titre, mp_text, mp_time, mp_lu)
    	VALUES (',', '".intval($_SESSION['id'])."' , '".$dest."', '".$titre."',
    	'".$message."', '".$timestamp."', '0')")
    	or die ("Le message n'a pas pu être envoyé, veuillez réessayer");
    
    	echo'<p>Votre message a bien été envoyé !<br />';
    
    }
    ?>
    


    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      27 décembre 2010 à 19:15:23

      Dans ta page de validation ajoute tout en haut :

      <?php header('Content-Type: text/html;charset=ISO-8859-1'); ?>
      • Partager sur Facebook
      • Partager sur Twitter
        28 décembre 2010 à 10:10:46

        ça ne marche pas.
        Je pense que ça peux peut-être venir du serialize() qui transforme la chaîne de caractère.

        exemple élect donne élect
        • Partager sur Facebook
        • Partager sur Twitter
          28 décembre 2010 à 13:58:04

          J'ai ajouté un echo'*****'.$_POST['titre'].'****'; pour savoir si le problème ne vient pas des transformations php, et apparemment ça affiche le mauvais texte.
          Donc le problème doit venir du code js.

          <?php 
          if(isset($_GET['action']) && ($_GET['action'] == "repondremp")) 
          {
          	
          	echo'*****'.$_POST['titre'].'****';
          	
          	//**************SECURITE D'INFORMATION POST**********  
          	if (empty($_POST['message']) OR empty($_POST['titre']) OR empty($_POST['dest'])) 
          	{
          		echo''.ERROR_POST.'';
          		exit;
          	}
          	else
          	{
          		$message = htmlspecialchars(mysql_real_escape_string($_POST['message']));
          		$titre = htmlspecialchars(mysql_real_escape_string($_POST['titre']));
          		$dest = (int) $_POST['dest'];
          	}
          	//***************************************************
          
          	mysql_query("INSERT INTO forum_mp
          	(mp_id, mp_expediteur, mp_receveur, mp_titre, mp_text, mp_time, mp_lu)
          	VALUES (',', '".intval($_SESSION['id'])."' , '".$dest."', '".$titre."',
          	'".$message."', '".$timestamp."', '0')")
          	or die ("Le message n'a pas pu être envoyé, veuillez réessayer");
          
          	echo'<p>Votre message a bien été envoyé !<br />';
          
          }
          ?>
          
          • Partager sur Facebook
          • Partager sur Twitter
            28 décembre 2010 à 14:02:38

            Ligne 5 ton affiche ton $_POST mais tu ne vérifies pas son existence avec isset().
            De plus on ne sait même pas quelle variable renvoie un problème d'accent, tu ne cibles pas assez le problème, tu nous aides pas beaucoup.
            • Partager sur Facebook
            • Partager sur Twitter
              28 décembre 2010 à 14:05:20

              Voilà le résultat:
              Array ( [titre] => épée test [message] => test [dest] => 41 )
              Votre message a bien été envoyé !

              --
              Le titre d'origine est "épée test"
              • Partager sur Facebook
              • Partager sur Twitter
                28 décembre 2010 à 14:06:47

                Tout en haut de page ajoute <?php print_r($_POST); ?>
                Et montre le résultat.

                Pense-y à l'avenir c'est très utile pour connaître les valeurs dans tes tableaux.
                • Partager sur Facebook
                • Partager sur Twitter
                  30 décembre 2010 à 15:03:26

                  il s'agit effectivement d'un problème de charset.
                  J'ai changé encodage dans la barre du haut de Notepad++ et les accents se sont mis à marcher, mais d'autres ne marchaient plus.

                  Quel charset dois-je choisir sur tous le site ?
                  ps: sur Notepad++ c'est réglé sur Encoder en AINSI et par code il y a
                  header('Content-Type: text/html;charset=ISO-8859-1');
                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 décembre 2010 à 15:28:55

                    C'est ce que j'aurais mis aussi.

                    Essaye UTF-8 (sans BOM).

                    Sinon essaye de mettre à la place de é : &eacute;
                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 mars 2011 à 17:00:15

                      Je me suis remis et j'ai trouvé de quoi résoudre le problème.
                      J'ai supprimé toutes les balises de type:
                      <?php header('Content-Type: text/html;charset=ISO-8859-1'); ?>
                      Et j'ai utiliser la fonction de notepad++ convertir en UTF-8 et le tout fonctionne.
                      Par contre je suis obligé de le faire pour toutes les pages.

                      Merci de m'avoir aidé.
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Problème d'affichage correct des accents

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown