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

JavaScript Discussion :

Espaces remplacés par le signe +


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 576
    Points : 803
    Points
    803
    Par défaut Espaces remplacés par le signe +
    Bonjour,
    J'ai des chaînes de caractères encodées json par php ou JS puis URI lors de l'enregistrement en cookie. A la lecture du cookie, les espaces sont remplacés par des signes +. Comme je peux aussi avoir de "vrais" signes +, je ne peux pas les filtrer. Comment faire?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    exemple(s) ?

  3. #3
    Membre averti Avatar de Kennel sébastien
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 226
    Points : 329
    Points
    329
    Par défaut
    Bonjour,

    « puis URI », tu as utilisé une fonction en PHP qui formate ?

    Si tu as vraiment besoin de cette encodage et de « vrais » signes +. Alors dans ce cas tu peux remplacer tes espaces avant d'utiliser ta fonction.

    Par exemple, remplacer les espaces par « :E: » puis au niveau du JS tu fais l’inverse tu remplaces « :E: » par un espace.

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 576
    Points : 803
    Points
    803
    Par défaut
    Merci pour ces premiers éléments de réponse.
    A défaut de mieux, je retiens provisoirement l'idée de Sébastien.

    Pour plus d'info, voici mon code PHP:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    	$post = $_POST;
    	$saveName = trim($post['save']);
    	unset($post['valid'], $post['save'], $post['recall']);
    	if (!empty($saveName)) {
    		$cookies = [];
    		$cookies[$saveName] = $post;
    		setcookie('save', json_encode($cookies), time() + 3600*24*3650);
    	}
    ?>
    et le décodage JS:
    Code javascript : 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 readCookie(name) {
    	var nameEQ = name + "=";
    	var ca = document.cookie.split(';');
    	for(var i=0;i < ca.length;i++) {
    		var c = ca[i];
    		while (c.charAt(0)==' ') c = c.substring(1,c.length);
    		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    	}
    	return null;
    }
     
    function convertCookies(json) {
    	json=decodeURIComponent(json);
    	json=JSON.parse(json);
    	return json;
    }
    et un exemple:
    Journée "Portes ouvertes"
    qui devient:
    Journée+"Portes+ouvertes"
    mais je peux aussi avoir
    nom+prénom ou nom + prénom
    qu'il faut conserver tel quel.

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    j'ai quand même l'impression qu'il y a une mauvaise alternance de encode/decode, comment sont préparées tes données avant envoie ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 576
    Points : 803
    Points
    803
    Par défaut
    C'est le json_encode de php qui fait tout. J'ai relu la doc php et la RFC 7159 mentionnée dans la doc php. J'ai essayé de mettre des options d'encodage mais ça me provoque des erreurs. En conséquence, je vais essayé de remplacer les espaces par autre chose comme tu le préconises.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    peut-on enfin voir un EXEMPLE (concret) de chaine qui présente le défaut ?

    Car json_encode ne remplace pas les espaces en +,
    (alors que urlencode, oui, mais le "+" est remplacé par "%2B" !)


    N.B. DEBOGAGE DE BASE :
    • AFFICHER la variable A CHAQUE ETAPE du process (avant/après PHP, JS)

    -> pour voir à quelle étape la transformation a lieu.

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 576
    Points : 803
    Points
    803
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,

    peut-on enfin voir un EXEMPLE (concret) de chaine qui présente le défaut ?
    Voir la fin de #4 dans balises QUOTE.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    DEBOGAGE DE BASE :
    • AFFICHER la variable A CHAQUE ETAPE du process (avant/après PHP, JS)

    -> pour voir à quelle étape la transformation a lieu.

  10. #10
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 576
    Points : 803
    Points
    803
    Par défaut
    C'est bien ce que j'ai essayé de faire mais ce que je n'arrive pas à comprendre est que à aucun moment je n'ai demandé un encodage url et il se fait apparemment automatiquement. Je n'arrive pas à comprendre si cette encodage se fait avant ou après l'encodage json.
    Le code php suivant retourne false.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    			$string = '%7B%22Portes_ouvertes%22%3A%7B%22font%22%3A%5B%22Arial%22%2C%22Arial%22%2C%22Arial%22%2C%22Arial%22%5D%2C%22size%22%3A%5B%2212%22%2C%2212%22%2C%2212%22%2C%2212%22%5D%2C%22color%22%3A%5B%220%2C0%2C0%22%2C%220%2C0%2C0%22%2C%220%2C0%2C0%22%2C%220%2C0%2C0%22%5D%2C%22insField%22%3A%5B%5B%22SNC%22%5D%2C%7B%221%22%3A%22Journ%5Cu00e9e%3Ae%3A%5C%22Portes%3Ae%3Aouvertes%5C%22%22%7D%2C%7B%222%22%3A%22dat_individus.prenom%22%2C%223%22%3A%22dat_individus.nom%22%7D%2C%7B%224%22%3A%22dat_individus.statut%22%2C%225%22%3A%22dat_ind_addresses.locality%22%7D%5D%2C%22insSep%22%3A%7B%222%22%3A%7B%223%22%3A%22%5Cu00a0%22%7D%2C%223%22%3A%7B%225%22%3A%22%5Cu00a0-%5Cu00a0%22%7D%7D%7D%2C%22test%22%3A%7B%22font%22%3A%5B%22Arial%22%5D%2C%22size%22%3A%5B%2212%22%5D%2C%22color%22%3A%5B%220%2C0%2C0%22%5D%2C%22insField%22%3A%5B%5B%22Journ%5Cu00e9es+%5C%22Portes+ouvertes%5C%22%22%5D%5D%7D%2C%22test2%22%3A%7B%22font%22%3A%5B%22Arial%22%5D%2C%22size%22%3A%5B%2212%22%5D%2C%22color%22%3A%5B%220%2C0%2C0%22%5D%2C%22insField%22%3A%5B%5B%22Journ%5Cu00e9es+%5C%22Portes+ouvertes%5C%22%22%5D%5D%7D%2C%22test3%22%3A%7B%22font%22%3A%5B%22Arial%22%5D%2C%22size%22%3A%5B%2212%22%5D%2C%22color%22%3A%5B%220%2C0%2C0%22%5D%2C%22insField%22%3A%5B%5B%22Journ%5Cu00e9es+%5C%22Portes+ouvertes%5C%22%22%5D%5D%7D%7D';
    			var_dump($string);
    			$pos = strpos(json_encode($string), '%2B');
    			var_dump($pos);
    			exit;
    La chaîne est un copier/coller du cookie. Si je l'analyse, je vois que l'espace est représenté par '%3Ae%3A'.
    J'ai recommencé le même test avec $string = 'Journée "Portes ouvertes"';
    Dans les 2 cas $pos = false.

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

Discussions similaires

  1. Double espace remplacé par un simple espace
    Par Commandeur dans le forum Requêtes
    Réponses: 3
    Dernier message: 25/10/2016, 14h31
  2. Réponses: 1
    Dernier message: 24/01/2008, 11h33
  3. [RegEx] Remplacer plusieurs espaces succesifs par un seul
    Par Marcus15 dans le forum Langage
    Réponses: 8
    Dernier message: 22/03/2007, 11h48
  4. [AJAX] Methode post remplace + par espace
    Par dgedge dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/07/2006, 09h09

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