Partage
  • Partager sur Facebook
  • Partager sur Twitter

[JS] Remplacer les < et > par &gt; &lt; dans l'aperçu d'un textarea

Sujet résolu
Anonyme
    11 janvier 2006 à 12:57:25

    Bonjour,

    Encore un "problème"...
    Cette fois, ma question est de savoir comment puis-je remplacer les < et > par &gt; &lt; dans l'aperçu d'un textarea

    Mais aussi peut-on "infiltrer" le code d'une page php avec par exemple une requète SQL dans un aperçu d'un formulaire?
    Au cas où mon code :

    // JavaScript Auteur: http://tofem.net/ressources
    var timer=0;
    var ptag=String.fromCharCode(5,6,7);
    function  visualisation() {
            t=document.forms['contenu'].texte.value 
            t=code_to_html(t)
            if (document.getElementById) document.getElementById("previsualisation").innerHTML=t
            if (document.forms['contenu'].auto.checked) timer=setTimeout(visualisation,1000)
    }
    function automatique() {
            if (document.forms['contenu'].auto.checked) visualisation()
    }
    function code_to_html(t) {
            t=nl2khol(t)
    // balise Gras
            t=deblaie(/(\[\/b\])/g,t)
            t=remplace_tag(/\[b\](.+)\[\/b\]/g,'<b>$1</b>',t) 
            t=remblaie(t)
    // balise Italique
            t=deblaie(/(\[\/i\])/g,t)
            t=remplace_tag(/\[i\](.+)\[\/i\]/g,'<i>$1</i>',t) 
            t=remblaie(t)
    // balise Underline
            t=deblaie(/(\[\/u\])/g,t)
            t=remplace_tag(/\[u\](.+)\[\/u\]/g,'<u>$1</u>',t) 
            t=remblaie(t)
    // balise Img
            t=deblaie(/(\[\/img\])/g,t)
            t=remplace_tag(/\[img\](.+)\[\/img\]/g,'<img src="$1"/>',t)
            t=remblaie(t)
    // balise URL   
            t=remplace_tag(/\[url=([^\s<>]+)\](.+)\[\/url\]/g,'<a href="$1" target="_blank">$2</a>',t)
            // balise URL   
            t=remplace_tag(/\[url\](.+)\[\/url\]/g,'<a href="$1" target="_blank">$1</a>',t)
            t=unkhol(t)
            t=nl2br(t)
            return t
    }
    function deblaie(reg,t) {
            texte=new String(t);
            return texte.replace(reg,'$1\n');
    }
    function remblaie(t) {
            texte=new String(t);
            return texte.replace(/\n/g,'');
    }
    function remplace_tag(reg,rep,t) {
            texte=new String(t);
            return texte.replace(reg,rep);
    }
    function nl2br(t) {
            texte=new String(t);
            return texte.replace(/\n/g,'<br />');
    }
    function nl2khol(t) {
            texte=new String(t);
            return texte.replace(/\n/g,ptag);
    }
    function unkhol(t) {
            texte=new String(t);
            return texte.replace(new RegExp(ptag,'g'),'\n');
    }


    // Helpline messages
    b_help = "Texte gras : [b]texte[/b]";
    i_help = "Texte italique : [i]texte[/i]";
    u_help = "Texte souligné : [u]texte[/u]";
    p_help = "Insérer une image : [img]http://image_url/[/img]";
    w_help = "Insérer un lien : [url]http://url/[/url] ou [url=http://url/]Nom[/url]";


    // Shows the help messages in the helpline window
    function helpline(help) {
            document.formu.helpbox.value = eval(help + "_help");
    }
      function countInstances(open,closed)
      {
         var opening = document.hop.contenu.value.split(open);
         var closing = document.hop.contenu.value.split(closed);
         return opening.length + closing.length - 2;
      }

      function TAinsert(text1,text2,contenu)
      {

         var ta = document.getElementById(contenu);

         if (document.selection) {
           
            var str = document.selection.createRange().text;
            ta.focus();
                      
            var sel = document.selection.createRange();
            if (text2!="")
            {
                     sel.text = text1 + sel.text + text2;
            }
            else
            {
               sel.text = sel.text + text1;
            }
           
         }
         else if (ta.selectionStart | ta.selectionStart == 0)
         {
            if (ta.selectionEnd > ta.value.length) { ta.selectionEnd = ta.value.length; }
           
            var firstPos = ta.selectionStart;
            var secondPos = ta.selectionEnd+text1.length;
           
            ta.value=ta.value.slice(0,firstPos)+text1+ta.value.slice(firstPos);
            ta.value=ta.value.slice(0,secondPos)+text2+ta.value.slice(secondPos);
             
            ta.selectionStart = firstPos+text1.length;
            ta.selectionEnd = secondPos;
            ta.focus();
         }
         else
         { // Opera
            var sel = document.hop.contenu;
           
            var instances = countInstances(text1,text2);
            if (instances%2 != 0 && text2 != ""){ sel.value = sel.value + text2; }
            else{ sel.value = sel.value + text1; }
         } 
      }



    Merci.

    • Partager sur Facebook
    • Partager sur Twitter
      11 janvier 2006 à 12:59:35

      si tu peut faire du php utilise la fonction htmlentities sinon en javascript je voi pas

      et pour la deuxieme question je voi pas
      • Partager sur Facebook
      • Partager sur Twitter
        11 janvier 2006 à 13:12:26

        Il te faut toi-même créer la fonction htmlspecialchars() :
        function htmlspecialchars(texte)
        {
         texte = texte.replace(/\"/g, '&quot;');
         texte = texte.replace(/&/g, '&amp;');
         texte = texte.replace(/</g, '&lt;');
         texte = texte.replace(/>/g, '&gt;');
         return texte;
        }
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          11 janvier 2006 à 18:46:05

          Ca marche merci, mais peut-on m'"attaquer" par cet apreçu?
          Et ai-je tous les caractères là :
          texte = texte.replace(/\"/g, '&quot;');
          texte = texte.replace(/&/g, '&amp;');
          texte = texte.replace(/</g, '&lt;');
          texte = texte.replace(/>/g, '&gt;');
          texte = texte.replace(/²/g, '&sup2;');
          texte = texte.replace(/é/g, '&eacute;');
          texte = texte.replace(/è/g, '&egrave;');
          texte = texte.replace(/ç/g, '&ccedil;');
          texte = texte.replace(/à/g, '&agrave;');
          texte = texte.replace(/°/g, '&deg;');
          texte = texte.replace(/§/g, '&sect;');
          texte = texte.replace(/ù/g, '&ugrave;');
          texte = texte.replace(/µ/g, '&micro;');
          texte = texte.replace(/£/g, '&pound;');
          texte = texte.replace(/¤/g, '&curren;');
          texte = texte.replace(/â/g, '&acirc;');
          texte = texte.replace(/ê/g, '&ecirc;');
          texte = texte.replace(/û/g, '&ucirc;');
          texte = texte.replace(/î/g, '&icirc;');
          texte = texte.replace(/ô/g, '&ocirc;');
          texte = texte.replace(/ä/g, '&auml;');
          texte = texte.replace(/ë/g, '&euml;');
          texte = texte.replace(/ü/g, '&uuml;');
          texte = texte.replace(/ï/g, '&iuml;');
          texte = texte.replace(/ö/g, '&ouml;');


          Encore merci.
          • Partager sur Facebook
          • Partager sur Twitter
            11 janvier 2006 à 19:09:49

            Non mais franchement, la fonction que je t'ai donnée est suffisante ! Pas besoin de faire de remplacements pour tous les caractères spéciaux, si tu définis un bon encodage (ce que je te conseille), sinon liste les milliers d'autres caractères, aussi ! ^^

            Et puis pour ta question, normalement pas (avec mon simple code, donc), mais dans tous les cas, toute "attaque" n'est faite que sur le client (enfin le navigateur). Donc aucun risque pour ton site. Mais... non non ne t'inquiète pas, avec un htmlspecialchars() complet (tel que la fonction que je t'ai écrite), il est impossible de faire parser du XHTML...
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              11 janvier 2006 à 19:47:11

              Très bien, merci beaucoup !
              • Partager sur Facebook
              • Partager sur Twitter

              [JS] Remplacer les < et > par &gt; &lt; dans l'aperçu d'un textarea

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown