IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Ajax, json, utf8, comment ne perdre aucun caractere


Sujet :

jQuery

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 187
    Points : 74
    Points
    74
    Par défaut Ajax, json, utf8, comment ne perdre aucun caractere
    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)
    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);               
            }
        });
    }
    et en php (maPage.php)

    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;
    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 :

    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 :

    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 ;)
    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 : "セ"

    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

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    encodeURI...
    jette un oeil par là
    http://xkr.us/articles/javascript/encode-compare/

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 187
    Points : 74
    Points
    74
    Par défaut
    je vais tester cela dessuite merci et je reviens ici, n'hesitez pas si vous avez d'autre voie

    [Edit]
    alors je viens de tester et cela bloque au niveau du "&"
    ma chaine tester :

    l'é+ê^^¨\,D"_hu-& /'o?*p"k&o!o'l€àé#$%(gd^^=)ん€

    le & dans ma variable fais foirer car Jquery pense que c'est une autre variable: exemple :

    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
     
    function saveDatas(data){
        var exemple = $("#exemple").val();
        var exemple1 = $("#exemple1").val();
     
        $.ajax({
          type: "POST",
          url: "maPage.php",
          dataType: 'json',
          data: "exemple="+encodeURI(exemple)+"&exemple1="+encodeURI(exemple1)+"&random="+Math.random(),
          success: function(msg)
            {
              console.log(msg.exemple);               
            }
        });
    }
    voila, le & de ma chaine en encode URI reste & donc dans le data, jquery crois que je change de variable....

    Donc pas bon merci quand meme si tu as une autre idée

    [Edit]
    sur le retour msg en js tous est bon avec encodeURI component, je vais voir comment cela s'enregistre en base et je te dis sa

    [Edit]
    voila donc je fais juste un mysql_real_escape_string avant d'enregistrer en base et ma chaine :

    l'é+ê^^¨\,D"_hu-& /'o?*p"k&o!o'l€àé#$%(gd^^=)ん€

    devient en base :

    l\'é+ê^^¨\\,D\"_hu-& /\'o?*p\"k&o!o\'l€àé#$%(gd^^=)ん€

    je met mysql_real_escape_string pour eviter les injections SQL (genre pour proteger) mais je ne veux pas les antislash en base

    [Edit]
    voila, si j'enregistre sans mysql real escape string c'est niquel en base mais maintenant j'ai un soucis a l'affichage, mes double et simple cote font foiré quant je met ma variable dans la value d'un input si j'echape ma variable comme ceci "<input .... value=\"".."\" />"

    et si je fais "<input .... value='".."' />" je suppose que sa va foiré au niveau du '

    fiou je vais m'en sortir lol

    [Edit]
    Trouvé ^^ en fait sa depend de la conf serveur :
    jutilise donc une fonction a la place de mysql_real_escape_string qui fait addslashes ou mysql_real_escape_string en fonction du magic quote et sa protege et pass niquel en base sans les antislash

    Pour les probleme a l'affichage quand simple et double quote, on m'a resolut mon soucis, mettre htmlspecialchars la ou il peut y avoir conflit voila (generalement dans un champs input qu'on prérempli)

    Merci merci Resolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/08/2011, 11h57
  2. Réponses: 4
    Dernier message: 11/01/2011, 22h40
  3. comment empecher taper +x caracteres dans Textbox?
    Par cortex024 dans le forum ASP.NET
    Réponses: 11
    Dernier message: 19/03/2007, 10h50
  4. Réponses: 3
    Dernier message: 06/03/2006, 07h31
  5. [AJAX][STRUTS][SPRING] Comment faire ?
    Par nighma dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 22/12/2005, 12h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo