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] Ajax encodeuri et php utf8_decode


Sujet :

AJAX

  1. #1
    Membre actif
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 479
    Points : 281
    Points
    281
    Par défaut [AJAX] Ajax encodeuri et php utf8_decode
    Bonjour,

    J'ai un formulaire dans lequel l'utilisateur entre du texte.
    Il peut donc y avoir tout type de caractère : accentués ou pas et autres caractères "spéciaux" (+?/...).

    Lorsque je soumets le formulaire, la valeur du texte est passée en ajax à un script php pour insertion en base de données.

    Le problème, c'est que les différents caractères ne sont pas correctement enregistrés.

    Après recherche, voici ce que j'obtiens :

    texte --> encodeURI(texte) (côté ajax) --> utf8_decode(urldecode($_POST["texte"])) (côté php) ---> les caractères accentués sont OK, mais pas les spéciaux

    texte --> encodeURIComponent(texte) (côté ajax) --> utf8_decode(urldecode($_POST["texte"])) (côté php) ---> les caractères spéciaux sont OK, mais pas les accentués

    Et je ne trouve pas comment combiner pour que tous les caractères soient correctement enregistrés.

  2. #2
    Membre actif
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 479
    Points : 281
    Points
    281
    Par défaut
    Bon, j'ai trouvé.

    texte (dans le formulaire) --> encodeURIComponent(texte) (côté ajax) --> utf8_decode($_POST["texte"]) (côté php) ---> tous les caractères sont OK.

    Ensuite, pour l'affichage des données stockées en base de données, il faut faire :

    $string = htmlentities ($row["texte"])

    ATTENTION : htmlentities() va traduire les caractères <, >, ", etc....
    Si ces caractères sont utilisés dans la chaîne "texte" pour indiquer une balise html, il faudra d'abord les remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $string = htmlentities ($row["texte"])
    $patterns[0] = '/&lt;/';
    $patterns[1] = '/&gt;/';
    $patterns[2] = '/&quot;/';
    $replacements[0] = '<';
    $replacements[1] = '>';
    $replacements[2] = '"';
    $string = preg_replace($patterns, $replacements, $string);

  3. #3
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Quand tu fais ton envoi de données par ajax, tu peux préciser l'encodage des données avec XMLHTTPRequest.setRequestHeader().

  4. #4
    Membre actif
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 479
    Points : 281
    Points
    281
    Par défaut
    Et cela donne quoi ?
    On peut supprimer encodeURIComponent ?
    Et côte php ?

  5. #5
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Ca dépend de pas mal de choses ^^ l'encodage de ta page, des données sur le serveur, etc.
    Je te donnais cette piste puisque tu étais encore dans les essais/tentatives... mais comme tu as trouvé c'est probablement devenu inutile...

    (en tout cas : c'est un moyen de résoudre les problèmes d'encodage, qui m'a parfois bien aidé ^^)

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par RomainVALERI Voir le message
    Quand tu fais ton envoi de données par ajax, tu peux préciser l'encodage des données avec XMLHTTPRequest.setRequestHeader().
    Tu veux dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=iso-8859-1");
    Je ne pense pas que ça se fait, Ajax utilise utf-8 pour envoyer les données.

  7. #7
    Membre actif
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 479
    Points : 281
    Points
    281
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=iso-8859-1");
    C'est exactement ce que j'ai dans mon code.

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Avec GET, on peut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlhttp.setRequestHeader('Content-Type','text/html; charset=iso-8859-1');
    mais avec POST
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=iso-8859-1");
    ça ne marche pas.

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

Discussions similaires

  1. [AJAX] Ajax, onclick et variable PHP
    Par fashuai dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/09/2008, 08h28
  2. [AJAX] ajax updater et fonctions php
    Par john123 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/03/2008, 21h56
  3. [AJAX] Ajax et les sessions PHP
    Par webrider dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 31/05/2007, 15h44
  4. [AJAX] Ajax, Php, Sessions, OScommerce
    Par Florent08800 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/05/2006, 10h57
  5. [Ajax] Petit problème avec PHP et AJAX
    Par cerede2000 dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 06/05/2006, 17h58

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