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 :

[Système] Un String complexe


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 723
    Points : 745
    Points
    745
    Par défaut [Système] Un String complexe
    Bonjour,

    Voilà j'ai un pb de chaîne de caractère un peu casse-tête:

    Soit $_POST["elm1"] un variable qui peut contenir n'importe quel code HTML.

    DAns une page php, j'ai:

    echo '<input type="hidden" name="bio_texte" value="'.$_POST["elm1"].'">';

    Comment éviter que les guillemets des attributs de balises et les accents de $_POST["elm1"] intéragissent avec le code qui l'englobe?

    J'ai essayé avec \" mais il ne peut englober de guillemets ("mon String") sans interragir avec eux.

    Vous voyez une piste?

  2. #2
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Points : 783
    Points
    783
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<input type="hidden" name="bio_texte" value=" '.$_POST['elm1'].' ">';
    Non ?

    Moi je fais ca : echo 'pppp', $_POST['ppp'] et pour les attribus : name=""

  3. #3
    Invité
    Invité(e)
    Par défaut
    Moi je préfère ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<input type='hidden' name='bio_texte' value='$_POST[elm1]'>";
    Ca marche et c'est beau!

    Après ça c'est chacun son truc.

    webrider
    Dernière modification par webrider ; 10/09/2006 à 09h44.

  4. #4
    Nouveau membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2005
    Messages : 33
    Points : 35
    Points
    35
    Par défaut
    Je pense que çà correspond plus a tes attentes.

    La fonction htmlspecialchars transforme les " et les ' en caractères html comme çà pas de problème et le stripslashes enlève les \ souvent mis dans le code quand le formulaire est envoyé en html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $_POST["elm1"]='L"heure';
    echo "<input type='text' name='bio_texte' value='".stripslashes(htmlspecialchars($_POST["elm1"],ENT_QUOTES))."'>";

  5. #5
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Citation Envoyé par webrider
    Moi je préfère ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<input type='hidden' name='bio_texte' value='$_POST[elm1]'>;
    Non !

    Un index de tableau sous forme de chaine de caractere doit toujours etre entouré de quote ou guillemets !

    Personnellement... deja quand je peux je stocke mes variables $_POST dans des variables locales, et sinon, je suis pour la concatenation de chaine ou la virgule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo "<input type='hidden' name='bio_texte' value='$variable'>";
    echo '<input type="hidden" name="bio_texte" value="'.$_POST['elm1'].'">';
    echo '<input type="hidden" name="bio_texte" value="', $_POST['elm1'], '">';
    sinon, oui, htmlentities sur la variable pour eviter les problemes de quotes ou guillemets dans la variable.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Citation Envoyé par Fladnag
    Je cite la page même de ton lien :
    // La suite est correcte si cela se passe dans une chaîne.
    // Les constantes ne sont pas remplacées par leur valeur dans une chaîne
    print "Bonjour $arr[fruit]"; // Bonjour pomme
    [...]
    Note : Pour insister, à l'intérieur d'une chaîne de caractères (chaîne de caractères) à guillemets doubles, il est correct de ne pas utiliser les guillemets simples dans les index et donc "$foo[bar]" est valide. Voyez les exemples ci-dessus pour plus de détails sur la syntaxe des variables dans les chaînes.
    L'exemple donné par webrider était donc, en plus d'être plus lisible (AMHA), tout à fait correct.

    Si éventuellement il y a un problème, c'est plus au niveau des attributs du tag. En effet les valeurs des attributs devraient être entre double quotes :
    <input type="hidden" /> au lieu de <input type='hidden' />

  7. #7
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 723
    Points : 745
    Points
    745
    Par défaut
    Merci à tous et en particulier à miscovisci qui est en plein dans le mille, c'est exactement la fonction dont j'ai besoin pour pouvoir passer d'une page à l'autre tout le contenu de ma variable.

    A noter que la fonction opposée est décrite ici, mais en PHP 5:

    http://phptutorial.info/?htmlspecialchars-decode

    Je teste mon code en local sur easyPHP et cette fonction n'est pas native, je dois être en PHP4. La plupart des serveurs prennent en compte PHP4 et non le 5, non?

    En tout cas je vais chercher de ce pas un equivalent de cette fonction en php4...

  8. #8
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 723
    Points : 745
    Points
    745
    Par défaut
    effectivement j'ai la version 4

    == EasyPHP 1.8
    == www.easyphp.org
    == apache 1.3.33 - php 4.3.10 - mysql 4.1.9 - phpmyadmin 2.6.1

  9. #9
    Invité
    Invité(e)
    Par défaut
    Dans la théorie je suis d'accord avec toi, dans la pratique non. Je ne mets jamais de ' ou de " et pas le moindre souci d'interprétation.

    @++

    webrider

  10. #10
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Citation Envoyé par webrider
    Dans la théorie je suis d'accord avec toi, dans la pratique non. Je ne mets jamais de ' ou de " et pas le moindre souci d'interprétation.
    Comme précisé dans la doc, c'est a tes risques et périls, je prefere appliquer la théorie. Imaginons que tu ais un champs s'appellant "control" par exemple, donc quelque part dans ton code : $tableau[control], ca marchera tres bien... jusqu'au jour ou, en PHP 6, 7 ou 8, un petit malin va se dire que ca serait bien d'avoir une fonction spéciale qui s'appellera "control" et qui fera des controles de type par exemple (on peux rever ;o)
    et bien là, ton $tableau[control] va te sortir une belle erreur "Parse error" parce que "control" sera devenu un mot clé du langage (comme isset ou empty)

    un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $liste=array('array', 'empty', 'if', 'for', 'isset', 'imagesx', 'abs', 'control');
     
    $liste=array_flip($liste);
     
    foreach($liste as $k=>$v) {
    	$s="echo \$liste[$k].'<br>';";
    	echo htmlspecialchars($s);
    	eval($s);
    }
    ?>
    va afficher :
    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
    echo $liste[array].'<br>';
    Parse error: parse error, expecting `'('' in d:\progs\easyphp1-8\www\test\array.php(9) : eval()'d code on line 1
    echo $liste[empty].'<br>';
    Parse error: parse error, expecting `'('' in d:\progs\easyphp1-8\www\test\array.php(9) : eval()'d code on line 1
    echo $liste[if].'<br>';
    Parse error: parse error, expecting `']'' in d:\progs\easyphp1-8\www\test\array.php(9) : eval()'d code on line 1
    echo $liste[for].'<br>';
    Parse error: parse error, expecting `']'' in d:\progs\easyphp1-8\www\test\array.php(9) : eval()'d code on line 1
    echo $liste[isset].'<br>';
    Parse error: parse error, expecting `'('' in d:\progs\easyphp1-8\www\test\array.php(9) : eval()'d code on line 1
    echo $liste[imagesx].'<br>';
    Notice: Use of undefined constant imagesx - assumed 'imagesx' in d:\progs\easyphp1-8\www\test\array.php(9) : eval()'d code on line 1
    5
    echo $liste[abs].'<br>';
    Notice: Use of undefined constant abs - assumed 'abs' in d:\progs\easyphp1-8\www\test\array.php(9) : eval()'d code on line 1
    6
    echo $liste[control].'<br>';
    Notice: Use of undefined constant control - assumed 'control' in d:\progs\easyphp1-8\www\test\array.php(9) : eval()'d code on line 1
    7

    Citation Envoyé par Taum
    L'exemple donné par webrider était donc, en plus d'être plus lisible (AMHA), tout à fait correct.
    oh... oui, en effet, je n'avais pas lu la phrase de la doc comme ca ;o) mea culpa donc... mais ca me perturbe que l'on puisse ne pas mettre de guillemets ou de quote quand le tableau est dans une chaine... je comprends l'interet pratique, mais ca pousse a ne pas en mettre a l'exterieur des chaines non plus, faudrait pas commencer a prendre de mauvaises habitudes ;o) mais, ponctuellement, pour alleger le code, je suis bien obliger de reconnaitre que c'est plus lisible.

  11. #11
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Points : 783
    Points
    783
    Par défaut
    Citation Envoyé par Elwyn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<input type="hidden" name="bio_texte" value=" '.$_POST['elm1'].' ">';
    On discute de quoi la en fait ?

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Taum
    Si éventuellement il y a un problème, c'est plus au niveau des attributs du tag. En effet les valeurs des attributs devraient être entre double quotes :
    <input type="hidden" /> au lieu de <input type='hidden' />
    Es-tu certain que les simples quotes ne sont pas valables pour spécifier les valeurs des attributs? Je code toujours mes formulaires HTML ce cette manière et jamais eu le moindre problème. En quoi est-ce moins bien?

    webrider

  13. #13
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Ca change rien du tout mais tu devrais reprendre l'habitude de mettre des double quote ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $var = "<input type='text' />";
    Tu écris souvent des conneries du genre ?!

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Yoshio
    Tu écris souvent des conneries du genre ?!
    Jamais, je crois que tu n'as pas compris ce que je voulais dire...

    Taum me dit que je devrais écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $var = '<input type="text" />';
    plutôt que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $var = "<input type='text' />";
    Du moins c'est ce que j'ai compris...

  15. #15
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Points : 783
    Points
    783
    Par défaut
    Ce debat est :

    1) inutile
    2) inutile
    3) inutile

    Votez maintenant ! TOP !

Discussions similaires

  1. extraire des informations d'un string complexe
    Par damien92 dans le forum Langage
    Réponses: 2
    Dernier message: 23/12/2007, 18h36
  2. [Système] checker un string
    Par cyrill.gremaud dans le forum Langage
    Réponses: 3
    Dernier message: 10/10/2006, 15h53
  3. [Système] float et string
    Par arcane dans le forum Langage
    Réponses: 2
    Dernier message: 04/10/2006, 17h27
  4. Réponses: 7
    Dernier message: 25/09/2006, 20h32
  5. Réponses: 4
    Dernier message: 31/08/2006, 15h31

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