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

AJAX Discussion :

[AJAX] Disparition caractère +


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 20
    Par défaut [AJAX] Disparition caractère +
    Bonjour à tous,

    Je développe actuellement une petite application en AJAX / PHP.
    Mon souci provient du passage des données du client vers le serveur pendant lequel le caractère + d'une chaine passée en post disparait.
    En fait, je sérialise le contenu de ma page dans une seule grosse chaine de caractères avec des marqueurs, et je l'envoie en mode post vers mon serveur pour être traitée en PHP avec les explode qui vont bien.

    Sur le serveur, je constate que le + a disparu et j'ai beau tenter d'échapper le + avant envoi dans le Javascript client, jamais il n'apparait sur le serveur. Ce n'est pas un problème de charset car tous les caractères accentués passent sans souci, et j'ai fait tous les tests possibles de conversion à l'envoi et à la reception de la donnée.

    C'est en revoyant la ligne qui prépare le send AJAX:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded; charset=windows-1252");
    que j'ai mis le doigt sur le phénomène "URL" avec le mot "urlencoded". J'ai donc remplacé le + dans ma variable par "%2B" et je retrouve mon + côté serveur.

    Ma question est : Existe-t-il un moyen propre de gérer ce cas de figure ? J'imagine qu'il y a d'autre caractères spéciaux pour url... comment les passer correctement au serveur ?

    Merci d'avance pour votre aide précieuse

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut
    J'avais le même style de pb pour le # mais n'avais pas trouvé de solution.
    Pour ton pb je crois que ceci y répondra:
    http://www.phpbuilder.com/board/show...php?t=10318476

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Salut.

    Effectivement, un "+" (espace) ou un "#" (ancre) ayant une signification dans une URL, il est nécessaire de les echapper, idéalement avec
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 20
    Par défaut
    Merci pour le coup de main.

    Effectivement, en utilisant encodeURIComponent j'encode tous les caractères spéciaux de mes datas, mais j'ai été confronté à un autre petit souci.
    Je me suis dit que si j'encodais d'un côté, il me faudrait décoder de l'autre, et j'ai donc utilisé urldecode côté serveur en PHP pour remettre les caractères dans leur format initial.
    Or, après quelques tests, je me suis rendu compte que le + disparaissait quand même

    Du coup, j'ai encodé sur le client et je n'ai rien décodé de l'autre côté, et ça fonctionne .
    Il est vrai que côté serveur j'applique également une conversion de charset avec la méthode iconv... Serait-ce elle qui se charge de remmettre de l'ordre dans mes datas ?

    Voici ce que j'ai côté client.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    serial = encodeURIComponent(serial);
    Et ce que j'ai au final côté serveur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $incoming = $_POST['serial'];
    $serialized = str_replace("'","''",iconv("UTF-8","CP1252",$incoming));
    $tab_serial = explode(",;",$serialized);
    $datas = explode("|",$tab_serial[0]);
    Quelqu'un pourrait me donner une explication sur le fait qu'il n'y ait pas besoin de décoder côté serveur ?

    Question subsidiaire... Encoder rallonge pas mal la taille de la chaine passée en post. N'y a-t-il pas des limitations ? Car parfois, je passe des tableaux entiers de cette façon.

    Merci d'avance

  5. #5
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 20
    Par défaut
    Bonjour,

    Bon, même si il reste des points que je ne m'explique pas forcément, après une batterie de tests, je peux affirmer que le caractère + ne disparait plus lors des différentes actions dans mon application.

    La fonction encodeURIComponent a donc sauvé mes délais

    Merci à tous pour votre aide

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

Discussions similaires

  1. [AJAX] Disparition d'un menu
    Par kamacho dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 07/03/2008, 18h26
  2. [AJAX] affichage caractères spéciaux ajax.
    Par vacknov dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 01/08/2007, 07h25
  3. [AJAX] Encodage caractères & Ajax
    Par Romalafrite dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 22/02/2007, 08h45
  4. [AJAX] Encodage caractères
    Par pit9.76 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/09/2006, 17h51
  5. [AJAX] AJAX et caractère euro
    Par Rodrick dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 01/03/2006, 17h12

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