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 :

[Ajax] Caractères spéciaux ?


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 20
    Par défaut [Ajax] Caractères spéciaux ?
    Bonjour,

    J'utilise le principe des listes liées sur mon site. Pour cela, je vais chercher les données dans la base de données (php + génération d'un fichier json) en utilisant le dynamic script loading.

    J'utilise htmlentities avant l'envoi donc les caractères spéciaux (ç, é etc) sont convertirs en entités html (ç etc). Seulement, ils ne s'affichent pas en tant que ç mais en tant que ç par exemple.

    Comment faire ?

    Merci

  2. #2
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    tu les colles en innerHTML ou en createTextNode ?
    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 !

  3. #3
    Membre averti
    Inscrit en
    Février 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 20
    Par défaut
    Je les colle en utilisant DOM (createTextNode). Par contre, je viens de penser à quelque chose, mon fichier json est en text/javascript.

    Mes 2 fonctions :
    Page de génération du fichier json (requête en PHP, securiser::html = htmlentities(string, ENT_COMPAT, UTF-8)) :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?php
            header("Content-type: text/javascript; charset=UTF-8");
            require('init.php');
            
            if(!empty($_GET['classe']))
            {
                    $classe = intval($_GET['classe']);
                    
                    $retour = mysql_query('SELECT id, nom FROM matieres WHERE classe_id='.$classe);
                    if(mysql_num_rows($retour) != 0 && !mysql_error())
                    {
                            $var = array();
                            while($donnees = mysql_fetch_array($retour))
                            {
                                    $var[] = array(intval($donnees["id"]), securiser::html($donnees["nom"]));
                            }
                            echo 'var oJson = '.json_encode($var).';';
                    }
                    else
                    {
                            echo 'var oJson = "";';
                    }
            }
            else
            {
                    $retour_matiere = mysql_query('SELECT id, classe_id, nom FROM matieres ORDER BY id DESC');
                    if(mysql_num_rows($retour_matiere) != 0 && !mysql_error())
                    {
                            $var = array();
                            while($donnees_matiere = mysql_fetch_array($retour_matiere))
                            {
                                    $var[] = array(intval($donnees_matiere['id']),'['.$classes[$donnees_matiere['classe_id']][2].'] '.securiser::html($donnees_matiere['nom']));
                            }
                            echo 'var oJson = '.json_encode($var).';';
                    }
                    else
                    {
                            echo 'var oJson = "";';
                    }
            }
            echo 'callback(oJson);';
    ?>
    Fonction qui gère le tout, appelée à l'ouverture de la fenetre :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    function sendDSL(sUrl, oParams) 
    {
    	for(sName in oParams) 
    	{
    		if(sUrl.indexOf("?") != -1) 
    		{
    			sUrl += "&";
    		} 
    		else 
    		{
    			sUrl += "?";
    		}
    		sUrl += encodeURIComponent(sName) + "=" + encodeURIComponent(oParams[sName]);
    	}
     
    	var oScript = document.createElement("script");
    	oScript.src = sUrl;
    	oScript.type = "text/javascript";
    	document.body.appendChild(oScript);
    }
     
    function matieres()
    {
    	var liste_classe = document.getElementById('classe');
     
    	liste_classe.onchange = function()
    	{
    		var classe = liste_classe.options[liste_classe.selectedIndex].value;
    		var matiere = document.getElementById('matiere');
     
    		var a_delete = matiere.getElementsByTagName('option');
    		var nbre_elements = a_delete.length;
     
    		for(var i = a_delete.length - 1; i >= 0; i--)
    		{
    			matiere.removeChild(a_delete[i]);
    		}
     
    		var chargement = document.createElement('option');
    		matiere.appendChild(chargement);			
    		matiere.getElementsByTagName('option')[0].setAttribute('value', '');
     
    		matiere.getElementsByTagName('option')[0].appendChild(document.createTextNode('Chargement ...'));
     
    		var oParams = {"classe": classe }; 
            sendDSL("../includes/ajax_devoirs.php", oParams);
    	};
    }
    Merci

    P.S. : Comme je créé mes éléments en JS + DOM, ai-je réellement besoin d'utiliser htmlentities, y a t il des failles XSS ? car les données de la base sont mises comme texte et ne sont pas interprétées ...

  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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    Ha ben voilà les html entities ne passent pas les textNodes ...
    essaye avec le code octal ou essaye plutot de passer par innerHTML ...
    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 averti
    Inscrit en
    Février 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 20
    Par défaut
    Pour le innerHTML -> j'ai vu sur plusieurs articles qu'il valait mieux utiliser les éléments DOM que le innerHTML car DOM était fait pour et était standard notamment ...

    Donc :
    1 - Faut-il que je protège mes variables que je transmet en JS et que j'affiche ? C'est à dire, seront-elles interprétées (faille XSS) ou considérées comme du texte (aucun problème) ?
    2 - S'il faut protéger mes variables, comment le faire tout en affichant les accents ?

    Merci

  6. #6
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    regarde coté php comment convertir en code octal comme ça tu conserves le textNode ...
    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 !

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

Discussions similaires

  1. [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
  2. [AJAX] Caractère spéciaux php/ajax.
    Par Empty_body dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/07/2007, 10h01
  3. Réponses: 1
    Dernier message: 22/01/2007, 20h33
  4. [PHP-JS] caractère spéciaux Ajax
    Par romano2003 dans le forum Langage
    Réponses: 3
    Dernier message: 01/08/2006, 18h25
  5. [AJAX] Ajax et les caractères spéciaux
    Par Moloc'h dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/01/2006, 14h02

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