Bonjour,
pour mon site, je souhaite créer un formulaire en ajax. Il fonctionne bien. Le seul problème est que les caractères accentués ne sont pas bien transmis.
J'essaye pourtant de tout forcer en utf-8 mais apparemment, il me manque une étape !
Merci d'avance pour votre aide.
Voici le formulaire :
Qui appelle un script javascript :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 <form method ="post" enctype ="multipart/form-data" action ="javascript:mail_ajax()" onsubmit="javascript:return verification_donnees(this);" > <div id="formulaire"> <p>Thème du message :</p> <select name="categorie" size="1"> <option>Probléme d'affichage</option> <option>Accessibilité</option> <option>Rubrique musique</option> <option>Rubrique danse</option> <option>Rubrique photos</option> <option selected="selected">Autre</option> </select> <p>Titre</p> <input name="titre" type="text" maxlength="70" /> <p>Adresse mail (facultatif) :</p> <input name="adresse" type="text" maxlength="70" /> <p>Contenu (limité à 5000 caractères) :</p> <textarea name ="corps" rows ="10" onkeyup="javascript:limite_taille(this);"></textarea> <p>Pièce jointe (taille limitée à 5Mo) :</p> <input name="piece_jointe" type="file" size="40" /> <input name ="envoyer" type ="submit" value="Envoyer" id ="bouton" /> </div> </form>
Et mon PHP de traitement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 <? $categorie = utf8_decode($_POST[categorie]); $titre = utf8_decode($_POST[titre]); $adresse = utf8_decode($_POST[adresse]); $contenu = utf8_decode($_POST[contenu]); $pj = $_POST[pj]; // Avec utf8_decode, les fichiers avec accents ne sont pas lus $reception = "Moi <monadresse@truc.fr>"; // Entête générique $entete_mail = "MIME-Version: 1.0\r\n"; $entete_mail .= "Date: ".date("D, j M Y H:i:s O")."\r\n"; // Entête si champs adresse mail rempli if($adresse!="") { $entete_mail .= "Reply-To: $adresse\r\n"; } // Mandatory for file_exists and filesize function clearstatcache(); if($pj=="") $erreur_pj = 1; // Pas de pièce jointe else { if(!file_exists($pj) || filesize($pj)>5242880) { // Maximum de 5Mo ou pièce inexistante echo "2"; return; } $erreur_pj = 0; // Une pièce jointe } // Si pas de pièce jointe, mail classique if($erreur_pj) { $entete_mail.="Content-Type: text/plain; charset=utf-8\r\n"; $entete_mail.="Content-Transfer-Encoding: 8bit\r\n"; } // Sinon, insertion de la pièce attachée else { include("mime_function.php"); $path_parts = pathinfo($pj); $ext = $type[strtolower($path_parts["extension"])]; $boundary = "----=".md5(uniqid(mt_rand())); $entete_mail .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n\r\n"; $entete_mail .= "--".$boundary."\r\n"; $entete_mail .= "Content-Type: text/plain; charset=utf-8\r\n"; $entete_mail .= "Content-Transfer-Encoding: 8bit\r\n"; $entete_mail .= "Content-Disposition: inline\r\n"; $contenu .= "\r\n\r\n--".$boundary."\r\n"; $contenu .= "Content-Disposition: attached\r\n"; if($ext=="") $ext = "application/octet-stream"; $contenu .= "Content-Type: ".$ext."; name=\"".$path_parts["basename"]."\"\r\n"; $contenu .= "Content-Transfer-Encoding: base64\r\n"; $contenu .= "Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"\r\n\r\n"; $fp = fopen($pj, "r"); $file = fread($fp, filesize($pj)); $file = chunk_split(base64_encode($file)); $contenu .= $file; $contenu .= "\r\n\r\n--".$boundary."--\r\n"; } $status_mail = mail($reception,"Site Cuba (".$categorie.") - ".$titre,$contenu,$entete_mail); $status_mail = 1; echo $status_mail; ?>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 function mail_ajax() { // Montrer le statut if(document.all) var information = document.all["status"]; //IE else var information = document.getElementById("status"); //FF information.style.visibility = "visible"; // Requête ajax var httpRequest = false; if(window.XMLHttpRequest) { httpRequest = new XMLHttpRequest(); if(httpRequest.overrideMimeType) { httpRequest.overrideMimeType('text/xml'); } } else if(window.ActiveXObject) { try { httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if(!httpRequest) { alert("Impossible de cr\351er une instance XMLHTTP. Veuillez r\351it\351rer votre envoi ult\351rieurement."); information.style.visibility = "hidden"; return; } try { httpRequest.open("POST", "../scripts/envoi_mail.php", true); } catch(e) { alert("L'ouverture du fichier distant a \351chou\351. Veuillez r\351it\351rer votre envoi ult\351rieurement."); information.style.visibility = "hidden"; return; } try { var categorie = document.forms[0].categorie.value; var titre = document.forms[0].titre.value; var adresse = document.forms[0].adresse.value; var contenu = document.forms[0].corps.value; var pj = document.forms[0].piece_jointe.value; // /X/g est utilisé pour remplacer toutes les occurences sinon, /X ne remplace que la première contenu = contenu.replace(/&/g,escape("&")); titre = titre.replace(/&/g,escape("&")); titre = titre.replace(/\r/g," "); titre = titre.replace(/\n/g," "); adresse = adresse.replace(/&/g,escape("&")); pj = pj.replace(/&/g,escape("&")); var data = "categorie="+categorie+"&titre="+titre+"&adresse="+adresse+"&contenu="+contenu+"&pj="+pj; httpRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); httpRequest.send(data); } catch(e) { alert("La communication avec le fichier distant a \351chou\351. Veuillez r\351it\351rer votre envoi ult\351rieurement."); information.style.visibility = "hidden"; return; } httpRequest.onreadystatechange = function() { if(httpRequest.readyState == 4 && httpRequest.status == 200) { var reponse = httpRequest.responseText; switch(reponse) { case "1": alert("Le message a bien \351t\351 envoy\351, merci pour l'int\351r\352t que vous portez \340 ce site."); document.forms[0].titre.value = ""; document.forms[0].adresse.value = ""; document.forms[0].corps.value = ""; document.forms[0].categorie.options[5].selected = true; document.forms[0].piece_jointe.value = ""; break; case "2": alert("La pi\350ce jointe n'existe pas ou elle est trop volumineuse."); break; default: alert("Votre message n'a pu \352tre envoy\351. Veuillez r\351it\351rer votre envoi ult\351rieurement."); } document.forms[0].titre.focus(); information.style.visibility = "hidden"; return; } } }
Partager