Bonjour la communauté Smiley smile

Je sais qu'il existe beaucoup de sujet la-dessus mais ce n'est pas faute d'avoir cherché ou même de faire des dizaines de test avec mon code.

J'utilise un code type de formulaire de contact depuis plusieurs temps.

<?php
// On initialise la session
session_start();
/* on vérifie que la code est toujours mémorisé en session et qu'il fait 6 caractères */
if(!isset($_SESSION['code']) || strlen($_SESSION['code']) != 6) die("Erreur !");

// on vérifie que la code entré est valide
if($_SESSION['code'] != $_POST['verif']) die('<script>window.location.replace("erreur.html");</script>');

if(isset($_POST) && isset($_POST['cf_name']) && isset($_POST['cf_email']) && isset($_POST['cf_message']))

{
   extract($_POST);
   if(!empty($cf_name) && !empty($cf_email) && !empty($cf_message)){
		$message=str_replace("\'","'",$message);
		$destinataire="monmail@site.be";
		$sujet="Nouveau message";
		$message="Un nouveau message est arrivé \n
		
		Nom : $cf_name \n
		Email : $cf_email \n
		Message : $cf_message";
		
		
		
		$entete="From: $cf_name \n $cf_email";
		mail($destinataire,$sujet,$message,$entete);
        header("Location:merci.html");
   }
   else{ 
		
        header("Location:erreur.html");
		  
   }
}
// on détruit les variables de session, désormais inutiles
session_unset();
session_destroy();
?>


Mais là je sèche Smiley decu
J'envoie une demande via le formulaire de contact, et j'ai des caractères comme ceci : arrivé

Je pense que je dois avoir un problème entre de l'ISO et UTF8 mais pas certain...
Car tout mes fichiers html sont en UTF8 et les php aussi

Je sais qu'il existe une ligne de code pour forcer l'utf8 mais je ne sais pas ou la mettre et laquelle utiliser

J'espère trouver une solution car cela fait 1 semaine que je cherche, surf etc ba oui Google est mon ami enfin je croyais Smiley lol

Merci
Modifié par spirou0069 (25 Jun 2014 - 10:41)
Petite précision, je n'ai pas de problème d'affichage dans le navigateur... uniquement quand je reçois le mail...
Bon ben je reviens en 40 Smiley lol ... J'ai transformé mon fichier html en iso-8859-1 et changé mon php en europe de l'ouest.... et ça fonctionne

J'ai également ajouté la ligne suivante dans mon fichier php :

		$cf_message = nl2br($cf_message) ;
		$headers .= 'charset=iso-8859-1' ;


Je laisse ouvert si quelqu'un peut m'aider à remettre en utf-8 mais là impossible...

Merci d'avance
Bonjour,

Il faut rajouter dans l'entête :

Content-Type: text/plain; charset=UTF-8\n
Bon, je vais mettre un exemple plus concret...
J'espère qu'une bonne âme qui connait bien le problème de codage UTF-8 va passer par ici =D

Voici un autre code avec lequel j'ai le même soucis pas de problème affichage dans le navigateur mais uniquement quand à la réception d'un mail.

Voici l'entête de ma page de contact

<head>
<title>titre du site</title>
<meta charset="utf-8">
</head>


Ensuite le code pour entrer les coordonnées du formulaire

<form id="contact-form">
                      <div class="success"> Formulaire de contact soumis!<br />
                        <strong>Nous vous recontactons rapidement.</strong></div>
                      <fieldset>
                        <label class="name">
                          <input type="text" value="Nom:" />
                          <span class="error">* Mauvais nom.</span> <span class="empty">*Ce champ est obligatoire.</span></label>
                        <label class="email">
                          <input type="text" value="E-mail:" />
                          <span class="error">* Mauvaise adresse email.</span> <span class="empty">*Ce champ est obligatoire.</span></label>
                        <label class="phone">
                          <input type="text" value="T&eacute;l&eacute;phone:" />
                          <span class="error">* Mauvais num&eacute;ro de t&eacute;l&eacute;phone.</span> <span class="empty">*Ce champ est obligatoire.</span></label>
                        <label class="message">
                          <textarea>Message:</textarea>
                          <span class="error">* Le message est trop court.</span> <span class="empty">*Ce champ est obligatoire.</span></label>
                        <div class="buttons-2"> <a class="button" href="#" data-type="reset"><strong><strong><strong>Reset</strong></strong></strong></a> <a class="button" href="#" data-type="submit"><strong><strong><strong>Envoyer</strong></strong></strong></a> </div>
                      </fieldset>
                    </form>


On génère le code

<?php
	$owner_email = $_POST["owner_email"];
	$headers = 'From:' . $_POST["email"];
	$subject = 'Un nouveau message ' . $_POST["name"];
	$messageBody = "";
	
	if($_POST['name']!='nope'){
		$messageBody .= '<p>Visiteur: ' . $_POST["name"] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}
	if($_POST['email']!='nope'){
		$messageBody .= '<p>Adresse Email: ' . $_POST['email'] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}
	if($_POST['state']!='nope'){		
		$messageBody .= '<p>State: ' . $_POST['state'] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}
	if($_POST['phone']!='nope'){		
		$messageBody .= '<p>Numéro de téléphone: ' . $_POST['phone'] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}	
	if($_POST['fax']!='nope'){		
		$messageBody .= '<p>Fax Number: ' . $_POST['fax'] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}
	if($_POST['message']!='nope'){
		$messageBody .= '<p>Message: ' . $_POST['message'] . '</p>' . "\n";
	}
	
	if($_POST["stripHTML"] == 'true'){
		$messageBody = strip_tags($messageBody);
	}

	try{
		if(!mail($owner_email, $subject, $messageBody, $headers)){
			throw new Exception('mail failed');
		}else{
			echo 'mail sent';
		}
	}catch(Exception $e){
		echo $e->getMessage() ."\n";
	}
?>


Puis on envoie



(function($){
	$.fn.extend({
		forms:function(opt){
			if(opt===undefined)
				opt={}
			this.each(function(){
				var th=$(this),
					data=th.data('forms'),
					_={
						errorCl:'error',
						emptyCl:'empty',
						invalidCl:'invalid',
						successCl:'success',
						successShow:'4000',
						mailHandlerURL:'bin/MailHandler.php',
						ownerEmail:'mon adresse mail',
						stripHTML:true,
						smtpMailServer:'localhost',
						targets:'input,textarea',
						controls:'a[data-type=reset],a[data-type=submit]',
						validate:true,
						rx:{
							".name":{rx:/^[a-zA-Z'][a-zA-Z-' ]+[a-zA-Z']?$/,target:'input'},
							".state":{rx:/^[a-zA-Z'][a-zA-Z-' ]+[a-zA-Z']?$/,target:'input'},
							".email":{rx:/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i,target:'input'},
							".phone":{rx:/^\+?(\d[\d\-\+\(\) ]{5,}\d$)/,target:'input'},
							".fax":{rx:/^\+?(\d[\d\-\+\(\) ]{5,}\d$)/,target:'input'},
							".message":{rx:/.{20}/,target:'textarea'}
						},
						preFu:function(){
							_.labels.each(function(){
								var label=$(this),
									inp=$(_.targets,this),
									defVal=inp.val(),
									trueVal=(function(){
												var tmp=inp.is('input')?(tmp=label.html().match(/value=['"](.+?)['"].+/),!!tmp&&!!tmp[1]&&tmp[1]):inp.html()
												return defVal==''?defVal:tmp
											})()
								trueVal!=defVal
									&&inp.val(defVal=trueVal||defVal)
								label.data({defVal:defVal})								
								inp
									.bind('focus',function(){
										inp.val()==defVal
											&&(inp.val(''),_.hideEmptyFu(label),label.removeClass(_.invalidCl))
									})
									.bind('blur',function(){
										!inp.val()
											?inp.val(defVal)										
											 [decu]_.isValid(label)
												?_.showErrorFu(label)
												:_.hideErrorFu(label)),
											(_.isEmpty(label)
												?_.showEmptyFu(label)
												:_.hideEmptyFu(label))
									})
									.bind('keyup',function(){
										label.hasClass(_.invalidCl)
											&&_.isValid(label)
												?_.showErrorFu(label)
												:_.hideErrorFu(label)
									})
								label.find('.'+_.errorCl+',.'+_.emptyCl).css({display:'block'}).hide()
							})
							_.success=$('.'+_.successCl,_.form).hide()
						},
						isValid:function(el){
							var ret=true,
								empt=_.isEmpty(el)
							if(empt)
								ret=false,
								el.addClass(_.invalidCl)
							else
								$.each(_.rx,function(k,d){
									if(el.is(k))
										d.rx.test(el.find(d.target).val())
											?(el.removeClass(_.invalidCl),ret=false)
											:el.addClass(_.invalidCl)
								})
							return ret
						},
						isEmpty:function(el){
							var tmp
							return (tmp=el.find(_.targets).val())==''||tmp==el.data('defVal')
						},
						validateFu:function(){							
							_.labels.each(function(){
								var th=$(this)								
								_.isEmpty(th)
									?_.showEmptyFu(th)
									:_.hideEmptyFu(th)
								_.isValid(th)
									?_.showErrorFu(th)
									:_.hideErrorFu(th)
							})
						},
						submitFu:function(){
							_.validateFu()
							if(!_.form.has('.'+_.invalidCl).length)
								$.ajax({
									type: "POST",
									url:_.mailHandlerURL,
									data:{
										name:$('.name input',_.form).val()||'nope',
										email:$('.email input',_.form).val()||'nope',
										phone:$('.phone input',_.form).val()||'nope',
										fax:$('.fax input',_.form).val()||'nope',
										state:$('.state input',_.form).val()||'nope',
										message:$('.message textarea',_.form).val()||'nope',
										owner_email:_.ownerEmail,
										stripHTML:_.stripHTML
									},
									success: function(){
										_.showFu()
									}
								})			
						},
						showFu:function(){
							_.success.slideDown(function(){
								setTimeout(function(){
									_.success.slideUp()
									_.form.trigger('reset')
								},_.successShow)
							})
						},
						controlsFu:function(){
							$(_.controls,_.form).each(function(){
								var th=$(this)
								th
									.bind('click',function(){
										_.form.trigger(th.data('type'))
										return false
									})
							})
						},
						showErrorFu:function(label){
							label.find('.'+_.errorCl).slideDown()
						},
						hideErrorFu:function(label){
							label.find('.'+_.errorCl).slideUp()
						},
						showEmptyFu:function(label){
							label.find('.'+_.emptyCl).slideDown()
							_.hideErrorFu(label)
						},
						hideEmptyFu:function(label){
							label.find('.'+_.emptyCl).slideUp()
						},
						init:function(){
							_.form=this
							_.labels=$('label',_.form)

							_.preFu()
							
							_.controlsFu()
															
							_.form
								.bind('submit',function(){
									if(_.validate)
										_.submitFu()
									else
										_.form[0].submit()
									return false
								})
								.bind('reset',function(){
									_.labels.removeClass(_.invalidCl)									
									_.labels.each(function(){
										var th=$(this)
										_.hideErrorFu(th)
										_.hideEmptyFu(th)
									})
								})
							_.form.trigger('reset')
						}
					}
				if(!data)
					(typeof opt=='object'?$.extend(_,opt):_).init.call(th),
					th.data({cScroll:_}),
					data=_
				else
					_=typeof opt=='object'?$.extend(data,opt):data
			})
			return this
		}
	})
})(jQuery)


Voilà le code que j'ai.
Tout est encodé en UTF-8
Document en HTML 5
Normalisation unicode en : C (Décomposition canonique ...)
Y à t'il une fonction à ajouter quelque part pour forcer l'utf-8?

Merci pour votre aide Smiley confus