Avatar billede cbox Nybegynder
21. april 2002 - 14:43 Der er 11 kommentarer og
1 løsning

Undgå HTML i textarea

Hvordan får jeg "encodet" eller "decodet" indholdet af et textarea, således det ikke er muligt for brugeren at indtaste HTML, eller i det mindste kunne præsentere teksten som HTML, som f.eks, her på eksperten. Det må være noget med at substituere f.eks. alle <'er med &lt; eller hvordan gøres det ?
Avatar billede disky Nybegynder
21. april 2002 - 14:49 #1
Det kan du gøre

Men du kan også smide en <pre></pre> rundt om texten når du skriver den ud igen.
Avatar billede Slettet bruger
21. april 2002 - 14:54 #2
Jeg kender ikke JSP - men men man kunne vel smække en funktion på strengen som fjernede HTML koderne?
Har en i ASP hvis du er interesseret?!
Avatar billede disky Nybegynder
21. april 2002 - 15:02 #3
Nu hjælper ASP kode nok ikke det fjerneste i JSP.

cbox:
Lav enten en routine selv der fjerner det (har jeg selv gjort) eller smid det sæt tags rundt om.
Avatar billede Slettet bruger
21. april 2002 - 15:06 #4
Disky > Det er muligt... Det hjælper da i hvert fald heller ikke at bruge
<pre></pre> for så bliver ALT indholdet fra det givne textarea jo pre'et - og ud fra cbox's spm går jeg ikke ud fra at det er hans ønske?!
Avatar billede disky Nybegynder
21. april 2002 - 15:42 #5
Han beder om 'eller i det mindste kunne præsentere teksten som HTML' og det er lige det <pre> gør !

Dit asp script hjælper bare intet, da java gudskelov ikke er et basic lignende sprog ligesom ASP er, hvis du dog i stedet for vbscript bruger jscript er det ikke bedre, da javascript og java INTET har tilfælles.

cbox:
Prøv <pre> virker det ikke så skriv det, så poster jeg min metode når jeg kommer hjem fra arbejde.
Avatar billede thomas_yde Nybegynder
21. april 2002 - 16:00 #6
problemet med pre er at den ikke formater koden, dvs hvis brugeren ikke laver retur selv så bliver pre heller ikke delt.
Ihvertfald ikke for mig. Så det kan se lidt underligt ud når man putter det ind i en table. Men Hvis du disky har et svar på det vil jeg gerne høre det.
:)
Avatar billede erikjacobsen Ekspert
21. april 2002 - 16:02 #7
<pre> bør kun bruges som en foreløbig løsning, specielt fordi en "ond" bruger blot
skriver </pre> i textarea, og så blot fylder på med HTML-tags.
Avatar billede disky Nybegynder
21. april 2002 - 16:53 #8
Jeg har en metode som laver filtrering af koden, dog kan jeg ikke nå den herfra da den ligger på min egen server som jeg ikke kan få adgang til igennem min arbejdsgivers firewall. (skide proxy)

Kort fortal gør metoden følgende:

scan texten igennem hvis man finder '>' byt ud med '&gt;' finder man '<' byt ud med '&lt;' og fortsæt igennem hele texten der skal vises.

Hvis det evt skal gemmes i en database skal man også orden ' og " da databasen ellers kan brokke sig over ugyldige SQL queries.

Med lidt fix brug af StringTokenizer kan det laves uden store problemmer.
Jeg har dog aldrig performance testet brugen af StringTokenizer i forhold til hardcore scanning af input strengen.
Avatar billede disky Nybegynder
21. april 2002 - 17:08 #9
Jeg har lige lavet denne her til dig, den konverterer > og <.

    private String fixIt(String input)
    {
        StringBuffer output=new StringBuffer();
        char ch;
        for(int x=0;x<input.length();x++)
        {
            ch=input.charAt(x);
            if(ch=='<')
            {
                output.append("&lt;");
            }
            else if(ch=='>')
            {
                output.append("&gt;");
            }
            else
            {
                output.append(ch);
            }
               
        }
        return output.toString();
    }
Avatar billede cbox Nybegynder
21. april 2002 - 20:40 #10
Disky -> Jeg har i forvejen en metode som fjerner ' og " inden insert's o.l. Den udvider jeg lige med dit forslag ovenover.
Er det den metode som du nævner tidligere, eller er du ikke kommet hjem fra arbejde endnu ? Søndag ?
Avatar billede disky Nybegynder
21. april 2002 - 23:57 #11
Ja jeg arbejdede 13.5 timer en høj hellig søndag (jeg hader deadlines)


Her er min TextConv klasse hvor der er lidt metoder i du måske kan bruge.

p.s. den er ikke nødvendigvis særligt godt optimeret.

/*
* Pad.java
*
* Created on 22. november 2000, 00:01
*/

package disky.util;

import java.lang.*;

/**
*
* @author  Administrator
* @version
*/
public class TextConv extends Object
{
    final static char textCRLF='\n';
    final static String htmlCRLF="<br>";

    final static char textLT='<';
    final static String htmlLT="&lt;";

    final static char textGT='>';
    final static String htmlGT="&gt;";
   
    final static char textSpace=' ';
    final static String htmlSpace="&nbsp;";
   
    final static char textPling='\'';
    final static String htmlPling="&#146;";

    final static char textAmp='&';
    final static String htmlAmp="&amp;";

    final static char textQuot='\"';
    final static String htmlQuot="&quot;";

    /*
        Adds a leading '0' in front of a string if length=1
    */
    public static String pad0(String in)
    {
        return (in.length()==1?"0"+in:in);
    }
   
    /*
        Convert a text string to a HTML text string
    */
    public static String text2Html(String in)
    {
        StringBuffer text=new StringBuffer();
 
        char ch;
       
        for(int x=0;x<in.length();x++)
        {
            ch=in.charAt(x);
           
            switch (ch)
            {
                case textLT:
                    text.append(htmlLT);
                    break;
                   
                case textGT:
                    text.append(htmlGT);
                    break;
               
                case textAmp:
                    text.append(htmlAmp);
                    break;

                case textQuot:
                    text.append(htmlQuot);
                    break;
                   
/*
                case textSpace:
                    text.append(htmlSpace);
                    break;
*/
                case textCRLF:
                    text.append(htmlCRLF);
                    break;

                case textPling:
                    text.append(htmlPling);
                    break;

                default:
                    text.append(ch);
            }
        }
        return text.toString();
    }

    public static String nl2br(String in)
    {
        StringBuffer out=new StringBuffer(in);
        int len=in.length();
        for(int x=0;x<len;x++)
        {
            if(out.charAt(x)==textCRLF)
            {
                out.replace(x,x+1,htmlCRLF);
                x+=4;
            }
        }
        return out.toString();
    }
}
Avatar billede cbox Nybegynder
01. maj 2002 - 09:45 #12
disky -> det virker perfekt ! tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester