Bonjour, je viens de me mettre a l'utf 8 ce qui inclus :
- balise meta
- header
- fichier
- base de donnée (utf8 unicode decode)
- requete (set name)
Sans ajax, je n'est aucun soucis avec mes charachteres, il s'enregistre et s'affiche parfaitement dans toutes les langues
Avec ajax (jquery 1.4.1, json) je voudrais savoir comment ne perdre aucun caractere et qu'il s'enregistre tel quel en base de donnée.
exemple (formulaire, je met qu'un champs pour l'exemple)
En js (recupe la valeur du champs et on la transmet a la page)
et en php (maPage.php)
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 function saveDatas(data){ var exemple = $("#exemple").val(); $.ajax({ type: "POST", url: "maPage.php", dataType: 'json', data: "exemple="+exemple+"&random="+Math.random(), success: function(msg) { console.log(msg.exemple); } }); }
Alors suivant ce que contient le champs(input, texte area,etc) je suis obliger de fair un ecape (exemple si dans ma chaine y'a des apostrophe, simple, double, des & commercial, des euros, des "+" etc... Bref, entre uriEncode, escape, etc, on perd des symboles donc ma question est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 header('Content-Type: text/json; charset=utf-8'); $exemple= $_POST['exemple']; $msg['exemple'] = $exemple; echo json_encode($msg); return;
Que me conseillé vous pour passé mes variable de champs (utf8) dans mon JS, l'envoyé en Json et que dans ma page php chaque caractere soit tjs en utf 8.
Pour mieux montrée mon exemple j fais sa actuelement :
Voila est avec sa, tous pass nickel en ajax sauf que les caractère spéciaux genre euros, japonais et autre sont retourné de cette forme : "セ"
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 en js : data: "exemple="+escAjax(exemple)+"&random="+Math.random(), ou escAjax() vaut : function escAjax(chaine){ chaine = chaine+""; var txt = chaine.replace(/\+/g,"###"); return escape(txt); } et en php je recupere comme ceci : $exemple= ajaxRealEscapeString($_POST['exemple']); ou ajaxRealEscapeString() vaut : function ajaxRealEscapeString($txt) { return(secure_sql(ereg_replace("###","+",unicode_decode(utf8_encode($txt)))));//utf8 ok mais ajax pas bon } ou unicode_decode vaut : function unicode_decode($txt) { return(ereg_replace('%u([[:alnum:]]{4})', '&#x\1;',$txt)); } (secure_sql c'est mysql_real_escape_string ou addslashes suivant le serv ;)
Bon de cette forme je ne sait pas repassé en caractère normal donc si quelqu'un a mieu car enregistré par ajax mes caractère sous la forme "セ" cela me convient pas trop alors que sans ajax cela ce fait nickel pour tous les caractère.
J'espère vous m'aurais saisi, c'est pas évident a expliquer... MErci
Partager