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 :

Mauvais encodage de caractères dans le résultat d'une fonction [Encodage]


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 45
    Points
    45
    Par défaut Mauvais encodage de caractères dans le résultat d'une fonction
    Bonsoir tout le monde,

    Dans ma page, voici la syntaxe HTML de base de ma liste :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <ul id="ul_categories">
      <li id="liste_categ1"><a href='categ.php?action=visu_categorie&amp;categ=1'>Titre catég 1</a></li>
      <li id="liste_categ2"><a href='categ.php?action=visu_categorie&amp;categ=2'>Titre catég 2</a></li>
      <li id="liste_categ3"><a href='categ.php?action=visu_categorie&amp;categ=3'>Titre catég 3</a></li>
    </ul>

    Je vous épargne tout les codes PHP, MySql et AJAX qui me permettent 1) de parser cette liste UL 2) de remplir et traiter un formulaire "Ajout nouvelle catégorie" (tout simplement parce que toutes ces jolies lignes de code fonctionnent à merveille et ne sont pas l'objet de ma présente demande !!!)

    MAIS...

    J'utilise une fonction JS qui ajoute "à la volée" une nouvelle balise <li>contenu</li> à l'intérieur de ma balise existante <ul id="ul_categories">, dans le cas où j'ai un retour AJAX positif sur un formulaire de création d'une NOUVELLE CATEGORIE.

    Ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ajout_LI('ul_categories',4,'Titre catég 4')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function ajout_LI(div_ul,id_cat,titre_cat) {
        var oUl = document.getElementById(div_ul);
        var oLi = document.createElement("li");
        var oText = document.createTextNode('<a href="categ.php?action=visu_categorie&amp;categ='+id_cat+'">'+titre_cat+'</a>');
        oLi.appendChild(oText);
        oUl.appendChild(oLi);
        return oLi;
    }
    Donc en principe, je devrais avoir un nouveau nœud dans ma <ul> qui m'affiche en HTML :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href='categ.php?action=visu_categorie&amp;categ=4'>Titre catég 4</a>

    SAUF QUE, en réalité, mon nouveau lien comporte des caractères spéciaux :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <li>&lt;a href="categ.php?action=visu_categorie&amp;categ=4&amp;categ=4"&gt;Titre catég 4&lt;/a&gt;</li>

    Le problème, c'est que ces caractères spéciaux me renvoient un lien inopérant dans ma page HTML : au lieu d'avoir un bon gros lien normal (c'est-à-ditr un titre souligné avec, derrière, un lien effectif), s'affiche dans ma liste une chaîne de caractères brute et non cliquable du genre :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="categ.php?action=visu_categorie&amp;categ=4">Titre catég 4</a>

    Je suppute donc que j'ai un problème d'encodage (ou de décodage) de ma chaîne de caractères en JavaScript, mais là, je bloque...

    Merci pour votre aide. @+

  2. #2
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    C'est la méthode document.createTextNode qui encode les caractères spéciaux. Dans ton cas, elle ne doit pas être utilisée pour créer l'ancre du lien.

    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
    function ajout_LI(div_ul,id_cat,titre_cat){
    	var ul,li,a,txt;
     
    	ul=document.getElementById(div_ul);
     
    	li=document.createElement('li');
    	li.id='liste_categ'+id_cat;
     
    	a =document.createElement('a');
    	a.setAttribute('href','categ.php?action=visu_categorie&categ='+id_cat);
     
    	txt=document.createTextNode(titre_cat);
    	a.appendChild(txt);
    	li.appendChild(a);
    	ul.appendChild(li);
     
    	return li;
    }

  3. #3
    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 112
    Points
    44 112
    Par défaut
    Bonsoir,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var oText = document.createTextNode...
    crée un noeud texte, donc remplace les caractères spéciaux tel que < et > pour que le texte soit affichable.

    Il te faut utiliser la propriété innerHTML dans ce cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oLi = document.innerHTML = '<a href="categ.php?action=visu_categorie&amp;categ='+id_cat+'">'+titre_cat+'</a>';
    C'est néanmoins louable que de vouloir utiliser les méthodes DOM.

  4. #4
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Accessoirement tu peux jeter un oeil sur ce tuto
    http://j-willette.developpez.com/tut...-site-en-utf8/
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 45
    Points
    45
    Par défaut
    Merci infiniment à vous trois, ça fonctionne nickel maintenant !

    Bon dimanche @+

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

Discussions similaires

  1. Encodage des caractères dans MySql
    Par barbug dans le forum Requêtes
    Réponses: 2
    Dernier message: 16/04/2009, 10h46
  2. Problème encodage des caractères dans une JListe
    Par pontus21 dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 27/08/2008, 00h57
  3. [MySQL] Encodage des caractères dans un fichier texte
    Par louveteau02 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/04/2007, 10h41
  4. [MySQL] mauvais encodage, lorsque modifié dans la base
    Par __fabrice dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/02/2007, 15h19

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