TextArea comment conserver les balises < et &gt

Résolu
Bonjour, je crée actuellement un textarea qui permet au membre d'insérer du bbcode, mais lorsqu'il veut insérer une balise html ( < et > ) et bien, lors de l'affichage ça me met...rien !!
Pourtant, sur ccm, ça fonctionne : <html>, <b>...comment ça se fait ?
Alors comment conserver les balises html ?

Merci à tous,
Configuration: Mac OS X
Firefox 2.0.0.13

12 réponses

  1. en php, regarde les fonctions: html_entities(), html_special_chars(), et strip_tags().

    Une des trois devrait faire l'affaire je crois. Par contre je sais pas si j'ai mis les _ aux bons endroits dans les noms ds fonctions...
    0
    1. Tout d'abord merci de ta réponse, mais j'ai essayé les trois sans résultat. Même avec les 3 en même temps. :(
      Si tu veux l'intégralité du code :
      function cur($matches) {
      $geshi = new GeSHi($matches[3], $matches[1]);
      return '<div class="titcode">'.$matches[2].'</div><div class="code">'.htmlentities(htmlspecialchars(strip_tags($geshi->parse_code()))).'
      ';
      }
      function make($chaine)
      {
      $chaine = stripcslashes(html_entity_decode($chaine));
      $chaine = preg_replace('/\<bold\>(.+?)\<\/bold\>/', '<strong>$1</strong>', $chaine);
      $chaine = preg_replace('/\<italic\>(.+?)\<\/italic\>/', '<em>$1</em>', $chaine);
      $chaine = preg_replace('/\<under\>(.+?)\<\/under\>/', '<u>$1</u>', $chaine);
      $chaine = preg_replace('/\<image\>(.+?)\<\/image\>/', '<img src="$1" />', $chaine);
      $chaine = preg_replace('/\<url\>(.+?)\<\/url\>/', '<a href="$1">$1</a>', $chaine);
      $chaine = preg_replace('/\<title1\>(.+?)\<\/title1\>/', '<p class="title1">$1</p>', $chaine);
      $chaine = preg_replace('/\<title2\>(.+?)\<\/title2\>/', '<p class="title2">$1</p>', $chaine);
      $chaine = preg_replace('/\<title3\>(.+?)\<\/title3\>/', '<p class="title3">$1</p>', $chaine);
      $chaine = preg_replace('/\<left\>(.+?)\<\/left\>/', '<div align="left">$1</div>', $chaine);
      $chaine = preg_replace('/\<center\>(.+?)\<\/center\>/', '<div align="center">$1</div>', $chaine);
      $chaine = preg_replace('/\<right\>(.+?)\<\/right\>/', '<div align="right">$1</div>', $chaine);
      $chaine = preg_replace('/\<info\>(.+?)\<\/info\>/', '<div class="info">$1</div>', $chaine);
      $chaine = preg_replace('/\<warn\>(.+?)\<\/warn\>/', '<div class="warn">$1</div>', $chaine);
      $chaine = preg_replace('/\<idea\>(.+?)\<\/idea\>/', '<div class="idea">$1</div>', $chaine);
      $chaine = preg_replace('/\<color="#(.+?)"\>(.+?)\<\/color\>/', '<font color="#$1">$2</font>', $chaine);
      $chaine = preg_replace_callback('/\<code language="(.+?)" title="(.+?)"\>(.+?)\<\/code\>/', 'cur', $chaine);
      $chaine = nl2br($chaine);
      return($chaine);
      }</code>
      0
      1. ARF !!

        j'avais un code justement pour interdire les << et >> dans les textarea

        pour les autoriser je savais pas qu'il fallait une manip spéciale je croyais que c'était implicite

        ==
        a tester :
        <textarea name="NAME" id="ID" tabindex="43" class="CLASS" style="width: 300px; height: 80px;" cols="40" rows="4" wrap="virtual"></textarea>


        ou alors dans ton script tu lui fais modifier < en <

        a voir
        0
        1. Malheureusement ça ne marche pas...
          Auriez vous une autre solution ?
          0
          1. et si tu demande a ton script de convertir le symbole < en
            & l t ;
            // et le symbole > en
            & g t ;
            ??

            sinon a froid comme ça je vois pas trop désolé

            sinon essaye de demander aux admins ou webmasters du site ou d'un autre site, si eux ont réussis, c'est qu'il y a forcément une solution
            0
        2. Contributeur
          salut,

          $var = str_replace( array( '<' , '>' ) , array( '& lt;' , '& gt;' ) , $var );

          en enlevant les espaces dans les entités.
          0
          1. Contributeur
            Ce qui donne :

            $var = str_replace( array( '<' , '>' ) , array( '&lt;' , '&gt;' ) , $var );

            à copier coller, sans avoir d'espaces à enlever.

            (bah oui, la balise code elle soule des fois ;o) )

            ++
            0
            1. Oui, j'ai déjà pensé à ça :
              function make($chaine)
              {
                 	$chaine = stripslashes(html_entity_decode($chaine));
              	$chaine = preg_replace('/\<bold\>(.+?)\<\/bold\>/', '<strong>$1</strong>', $chaine);
              	$chaine = preg_replace('/\<italic\>(.+?)\<\/italic\>/', '<em>$1</em>', $chaine);
              	$chaine = preg_replace('/\<under\>(.+?)\<\/under\>/', '<u>$1</u>', $chaine);
              	$chaine = preg_replace('/\<image\>(.+?)\<\/image\>/', '<img src="$1" />', $chaine);
              	$chaine = preg_replace('/\<url\>(.+?)\<\/url\>/', '<a href="$1">$1</a>', $chaine);
              	$chaine = preg_replace('/\<title1\>(.+?)\<\/title1\>/', '<p class="title1">$1</p>', $chaine);
              	$chaine = preg_replace('/\<title2\>(.+?)\<\/title2\>/', '<p class="title2">$1</p>', $chaine);
              	$chaine = preg_replace('/\<title3\>(.+?)\<\/title3\>/', '<p class="title3">$1</p>', $chaine);
              	$chaine = preg_replace('/\<left\>(.+?)\<\/left\>/', '<div align="left">$1</div>', $chaine);
              	$chaine = preg_replace('/\<center\>(.+?)\<\/center\>/', '<div align="center">$1</div>', $chaine);
              	$chaine = preg_replace('/\<right\>(.+?)\<\/right\>/', '<div align="right">$1</div>', $chaine);
              	$chaine = preg_replace('/\<info\>(.+?)\<\/info\>/', '<div class="info">$1</div>', $chaine);
              	$chaine = preg_replace('/\<warn\>(.+?)\<\/warn\>/', '<div class="warn">$1</div>', $chaine);
              	$chaine = preg_replace('/\<idea\>(.+?)\<\/idea\>/', '<div class="idea">$1</div>', $chaine);
              	$chaine = preg_replace('/\<color="#(.+?)"\>(.+?)\<\/color\>/', '<font color="#$1">$2</font>', $chaine);
              	$chaine = preg_replace_callback('/\<code language="(.+?)" title="(.+?)"\>(.+?)\<\/code\>/', 'cur', $chaine);
                  $chaine = preg_replace('/\</', '<', $chaine);
                  $chaine = preg_replace('/\>/', '>', $chaine);
                  $chaine = nl2br($chaine);
                  return($chaine);
              }


              Mais du coup ça affecte aussi les <image>, <url>,etc...
              Merci beaucoup d'avance,
              0
              1. Et en faisant l'inverse : en lui demandant de convertir les : & g t ; en > ???
                0
            2. Merci mais malheureusement ça ne marche pas non plus. Peut être en créant un array avec ('url','<image>'),etc...
              0
              1. Contributeur
                tu utilises 'string_repleace()' avec un tableau contenant toutes les balises à modifier et un autre avec toutes les balises modifiées ?!
                0
                1. Non, c'était juste une proposition mais je ne la croit pas concrète. Avez vous autrechose, svp ?
                  0
                  1. C' chaud ça !!!

                    C' la 1ere fois qu'on bloque a plusieurs sur un truc...

                    Et en demandant aux admins et webmasters ??
                    0
                  2. Contributeur
                    @BartWadelasalut,

                    ouais mais le problème est pas très clair…
                    se rendre compte que <image> est affecté après avoir effectué son remplacement, c'est pour le moins contradictoire ! cf. <9>
                    -;o)
                    0
                2. Tu veux dire que je devrais mettre les preg_replace de < et > avant les autres ? Ok, je test :)

                  EDIT : Et ça marche impec', merci
                  0