1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    décembre 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : décembre 2008
    Messages : 235
    Points : 145
    Points
    145

    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
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    10 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 10 216
    Points : 20 306
    Points
    20 306

    Par défaut

    Bonjour,

    exemple(s) ?
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire arrivent aisément."
    Nicolas Boileau-Despréaux (1636-1711).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  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 : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : septembre 2008
    Messages : 226
    Points : 327
    Points
    327

    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.
    Vous cherchez à apprendre les bases en langage « C », « Go », « Rust », « PHP 7 », « Java 9 » ou « Python 3 » ? N'hésitez pas à me contacter par MP.

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    décembre 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : décembre 2008
    Messages : 235
    Points : 145
    Points
    145

    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
    11 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2011
    Messages : 11 902
    Points : 25 327
    Points
    25 327

    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 habitué
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    décembre 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : décembre 2008
    Messages : 235
    Points : 145
    Points
    145

    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
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    10 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 10 216
    Points : 20 306
    Points
    20 306

    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.
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire arrivent aisément."
    Nicolas Boileau-Despréaux (1636-1711).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    décembre 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : décembre 2008
    Messages : 235
    Points : 145
    Points
    145

    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
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    10 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 10 216
    Points : 20 306
    Points
    20 306

    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.
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire arrivent aisément."
    Nicolas Boileau-Despréaux (1636-1711).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  10. #10
    Membre habitué
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    décembre 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : décembre 2008
    Messages : 235
    Points : 145
    Points
    145

    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. Remplacer plusieurs espaces succesifs par un seul
    Par Marcus15 dans le forum Regex
    Réponses: 8
    Dernier message: 22/03/2007, 11h48
  4. ajax : methode post remplace + par espace
    Par dgedge dans le forum AJAX
    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