TextArea comment conserver les balises < et &gt

Résolu
Snip714 Messages postés 249 Statut Membre -  
Snip714 Messages postés 249 Statut Membre -
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. neo1012
     
    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
  2. Snip714 Messages postés 249 Statut Membre 65
     
    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
  3. Snip714 Messages postés 249 Statut Membre 65
     
    up
    0
  4. BartWadela Messages postés 606 Statut Membre 111
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Snip714 Messages postés 249 Statut Membre 65
     
    Malheureusement ça ne marche pas...
    Auriez vous une autre solution ?
    0
    1. BartWadela Messages postés 606 Statut Membre 111
       
      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
  7. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
     
    salut,

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

    en enlevant les espaces dans les entités.
    0
  8. gryzzly Messages postés 5220 Date d'inscription   Statut Contributeur Dernière intervention   1 340
     
    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
  9. Snip714 Messages postés 249 Statut Membre 65
     
    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. BartWadela Messages postés 606 Statut Membre 111
       
      Et en faisant l'inverse : en lui demandant de convertir les : & g t ; en > ???
      0
  10. Snip714 Messages postés 249 Statut Membre 65
     
    Merci mais malheureusement ça ne marche pas non plus. Peut être en créant un array avec ('url','<image>'),etc...
    0
  11. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
     
    tu utilises 'string_repleace()' avec un tableau contenant toutes les balises à modifier et un autre avec toutes les balises modifiées ?!
    0
  12. Snip714 Messages postés 249 Statut Membre 65
     
    Non, c'était juste une proposition mais je ne la croit pas concrète. Avez vous autrechose, svp ?
    0
    1. BartWadela Messages postés 606 Statut Membre 111
       
      C' chaud ça !!!

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

      Et en demandant aux admins et webmasters ??
      0
      1. Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923 > BartWadela Messages postés 606 Statut Membre
         
        salut,

        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
  13. Snip714 Messages postés 249 Statut Membre 65
     
    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