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

Langage PHP Discussion :

htmlentities et foreach


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 71
    Points : 41
    Points
    41
    Par défaut htmlentities et foreach
    bonjou à tous,

    J'ai un problème avec l'utilisation de htmlentities dans une boucle foreach. Cette boucle permet de transformer tous les $_POST envoyés de mon formulaire en fonctions. Je pensais pouvoir transformer par la meme occasion la valeur de mes fonctions en entités HTML avec htmlentities, mais cela ne fonctionne pas.

    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach($_POST as $key=>$value) {
    	$$key = $value;
    	$$key = htmlentities($$key, ENT_COMPAT);
    }
    J'ai aussi essayé de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach($_POST as $key=>$value) {
    	$$key = htmlentities($value, ENT_COMPAT);
    }
    Aucune des 2 syntaxes ne fonctionne. Foreach et htmlentities sont-ils incompatibles ou me suis-je trompé dans la syntaxe?

    Merci par avance pour votre aide.

  2. #2
    Membre actif Avatar de BlackSmith
    Inscrit en
    Mars 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 181
    Points : 207
    Points
    207
    Par défaut
    Essaye comme ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach($_POST as $key=>$value) {
    	$_POST[$key] = htmlentities($value, ENT_COMPAT);
    }

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 71
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par BlackSmith Voir le message
    Essaye comme ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach($_POST as $key=>$value) {
    	$_POST[$key] = htmlentities($value, ENT_COMPAT);
    }
    En fait, cela ne change rien ...

    Pour préciser, cela ne me sort pas d'erreur d'écriture, mais le les valeurs des fonctions contiennent toujours des accents après la boucle foreach (dans les 3 cas)

    Y'a-t-il une autre solution?

  4. #4
    Membre actif Avatar de BlackSmith
    Inscrit en
    Mars 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 181
    Points : 207
    Points
    207
    Par défaut
    enfaite tu veut juste supprimer des accents.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $text = htmlentities($text, ENT_COMPAT,'UTF-8');
    $text = preg_replace( "`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig);`i","\\1", $text );
    Après avoir transformer les accents en entité html, il te faut les remplacer par des lettres non accentués.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 71
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par BlackSmith Voir le message
    enfaite tu veut juste supprimer des accents.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $text = htmlentities($text, ENT_COMPAT,'UTF-8');
    $text = preg_replace( "`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig);`i","\\1", $text );
    Après avoir transformer les accents en entité html, il te faut les remplacer par des lettres non accentués.
    En fait, j'ai trouvé la solution, car en fait, la fonction que j'utilisais etait la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach($_POST as $key=>$value) {
    	$$key = $value;
    	$$key = htmlentities($$key, ENT_COMPAT);
            $_SESSION[$key] = $value;
    }
    Mais sur le forum, j'avais enlevé la dernière ligne pour éviter les confusions lors l'explication de mon problème. Au final, il s'avère que c'est cette ligne qui pose problème dans ma fonction, sans savoir pourquoi ...

    J'ai donc changé cette ligne de place et tout est rentré dans l'ordre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach($_POST as $key=>$value) {
    	$$key = $value;
    	$_SESSION[$key] = $value;
    	$$key = stripslashes(htmlentities($$key, ENT_COMPAT));
    }
    Si, au cas où, vous savez pourquoi ca bloquait sous l'ancienne forme, dites le moi

  6. #6
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2006
    Messages : 317
    Points : 597
    Points
    597
    Par défaut
    Ca bloquait pour une raison tres simple :
    - $$key et $value sont 2 variables différentes.

    Ton code aurait marché comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach($_POST as $key=>$value) {
    	$$key = $value;
    	$$key = htmlentities($$key, ENT_COMPAT);
            $_SESSION[$key] = $$key;
    }
    Moralité : ne jamais préjuger de ce qui est utile ou non dans un script

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

Discussions similaires

  1. [MySQL] Chaine tronquée apres htmlentities.
    Par castaka dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/05/2005, 12h54
  2. [C#] ArrayList, foreach et suppression
    Par lalystar dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/04/2005, 11h42
  3. [langage] foreach, last et valeurs de sortie
    Par Herode dans le forum Langage
    Réponses: 6
    Dernier message: 01/04/2005, 14h37
  4. Réponses: 6
    Dernier message: 01/02/2005, 20h02
  5. [String] équivalent htmlentities
    Par mousstik dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 29/12/2004, 14h26

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