Bonjour amis développeurs
Pour commencer, je m'excuse mais malgré l'intitulé connu sur ce forum (et bien d'autres), et après moultes et moultes recherches croyez-moi, je n'ai encore trouvé à cette heure aucune discussion concernant exactement le problème auquel je suis confronté...
J'ai tout d'abord cru que mon soucis venait de l'encodage de mes bases de données, qui est en utf8_general_ci, mais il n'en est rien en fait
Donc...
Primo j'ai un formulaire utilisateur (le bête formulaire pour que le gars qui surfe sur mon site puisse poster un message sur le forum...), jusque là aucun problème.
Je traite tout ça via la fonction Javascript "enregistrerMessage( )" pour appeler un script AJAX afin d'insérer le message dans ma base de données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <form action="javascript:enregistrerMessage('nouveau_message', 1);" name="nouveau_message"> <p class="entete_p">Corps du message</p> <div id="champ_form"><textarea class="champ_texte" name="texte" cols="40" rows="15"></textarea></div> <div class="entete_p"> <p><input name="bouton_preview" type="button" value="Prévisualiser" onclick="javascript:preview('nouveau_message', 'texte');" /> <input name="bouton_poster" type="submit" value="Poster" /> <input name="bouton_brouillon" type="button" value="Enregistrer le brouillon" disabled="disabled" /></p> </div> </form>
Jusque là encore, tout va bien, mes alert( ) au niveau Javascript me renvoient le bon texte saisi, accents, balises, symbole €, etc...
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 function enregistrerMessage(formulaire, id_sujet) { var formu = document.forms[formulaire]; document.getElementById("erreurs").innerHTML = ""; document.getElementById("erreurs").style.display = "none"; formu.elements["texte"].style.border = "1px solid #99C500"; if (formu.elements["texte"].value != "") { formu.elements["bouton_poster"].value = "Enregistrement en cours..."; formu.elements["bouton_poster"].disabled = true; module_AJAX("./?page=nouveaumessage_ajax&s="+id_sujet, constructData(formulaire), resultatEnregistrementMessage); } else { $("#erreurs").slideDown("fast"); if (formu.elements["texte"].value == "") { formu.elements["texte"].style.border = "1px solid #FF0000"; document.getElementById("erreurs").innerHTML += "Texte manquant<br />"; } } }
Là ou ça a commencé à dérailler, c'est quand j'ai regardé le contenu de ma base de données la première fois... Le symbole € était remplacé par le fameux %u20AC (même plus besoin de chercher le code, je commence à le connaitre par coeur...) !
Je suis donc remonté un peu dans la chaine d'enregistrement, et je me suis aperçu donc que sur le fichier PHP appelé par AJAX qui traite l'info, mon symbole € n'apparait pas comme il faut... Toujours ce fichu %u20AC !
Donc afin de vous éclairer sur mon environnement, déjà, je travaille sur Firefox (toutes mises à jour faites), mais le soucis apparait également sur Chrome ou IE<last>...
Ma page HTML débute par un DOCTYPE pour HTML5, et j'utilise la balise méta suivante (et j'y tiens) :
Mes scripts AJAX contiennent, côté PHP, la ligne de commande :
Code : Sélectionner tout - Visualiser dans une fenêtre à part <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15" />
et côté "template", le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part header('Content-Type: text/xml;');
Pour ma recherche de solutions, j'ai tenté toutes les combinaisons d'encodage de mes pages, j'ai également tenté d'utiliser la fonction "urldecode( )" au niveau du script PHP qui récupère les données... sans plus de résultats...
Code : Sélectionner tout - Visualiser dans une fenêtre à part <?xml version="1.0" encoding="ISO-8859-15" ?>
Côté Javascript sur le traitement AJAX, j'ai un "escape( )" pour mettre en forme les données à envoyer au script... Si je l'enlève c'est encore pire (normal)...
Si vous avez une solution, une piste, un rien qui puisse m'aider, je vous en remercie d'avance !![]()
Partager