Avatar billede speder2 Nybegynder
04. august 2002 - 15:34 Der er 17 kommentarer og
2 løsninger

HTML Encode

Hej

I ASP er der en html.encode-funktion, men jeg synes ikke der er noget tilsvarende i JSP. Eller?

Bemærk at det er en html-encoder jeg er ude efter (ikke en url-encoder).
Avatar billede =maddog= Nybegynder
04. august 2002 - 15:42 #1
hvad er en HTML-encoder i modsætning til URL-encoder og hvad vil du bruge den til? Bare nysgerrig.
Avatar billede neteffect Nybegynder
04. august 2002 - 17:25 #2
HTML-encode laver tegn med særlig betydning i HTML, bla. "<" og ">", om til tegnkoder. fx bliver "<" til "&lt;" og ">" til "&gt;".

Konverteringen er nødvendig, når man vil vise tegnene på sin webside. Ellers ville browseren fortolke dem som dele af HTML-tags.
Avatar billede =maddog= Nybegynder
04. august 2002 - 17:28 #3
oh ja. jeg har selv lavet en metode til det. det er muligt at det findes, men husk at strings er immutable i Java.
Avatar billede =maddog= Nybegynder
04. august 2002 - 17:45 #4
burde det ikke hedde HTML-decoder? Siden det laver html om til html-entities?
Avatar billede speder2 Nybegynder
04. august 2002 - 19:54 #5
Hej

Jeg har fundet nedenstående. Det ville være fedt, hvis jeg lige kunne putte den i min JSP-kode. Er der en, som kan "konvertere" den JSP-kode?`

*************************

// Copyright (C)1995-2002 ASH multimedia lab. http://ash.jp/
package jp.ash.common;

/** HTML$B%f!<%F%#%j%F%#(B **/
public class Html {
  /** HTML$B%(%s%3!<%I$,I,MW$JJ8;z(B **/
  static char[] htmlEncChar = {'&', '"', '<', '>'};
  /** HTML$B%(%s%3!<%I$7$?J8;zNs(B **/
  static String[] htmlEncStr = {"&amp;", "&quot;", "&lt;", "&gt;"};

  /**
  * HTML$B%(%s%3!<%I=hM}!#(B
  *  &,",<,>$B$NCV49(B
  **/
  public static String encode (String strIn) {
    if (strIn == null) {
      return(null);
    }

    // HTML$B%(%s%3!<%I=hM}(B
    StringBuffer strOut = new StringBuffer(strIn);
    // $B%(%s%3!<%I$,I,MW$JJ8;z$r=gHV$K=hM}(B
    for (int i = 0; i < htmlEncChar.length; i++) {
      // $B%(%s%3!<%I$,I,MW$JJ8;z$N8!:w(B
      int idx = strOut.toString().indexOf(htmlEncChar[i]);

      while (idx != -1) {
        // $B%(%s%3!<%I$,I,MW$JJ8;z$NCV49(B
        strOut.setCharAt(idx, htmlEncStr[i].charAt(0));
        strOut.insert(idx + 1, htmlEncStr[i].substring(1));

        // $B
Avatar billede =maddog= Nybegynder
04. august 2002 - 20:08 #6
public String replace(String in, char old, String new) {
        char[] mc = in.toCharArray();
        StringBuffer out = new StringBuffer(in.length()+new.length());
        for (int i=0; i!=mc.length; i++) {
            if (mc[i]==old)    out.append(ny);  else out.append(mc[i]);
        }
        return out.toString();
    }
    public String replaceAll(String myS) {
        return replace(replace(replace(replace(myS, '&', "&amp;"), '<', "&lt;"), '>', "&gt;"), (char)13, "<br />");
    }

dur fint.
Avatar billede =maddog= Nybegynder
04. august 2002 - 20:10 #7
Faktisk burde man lave StringBufferen lidt større, da det koster en del mere at rehashe den end lave den lidt for stor.
Avatar billede =maddog= Nybegynder
04. august 2002 - 20:11 #8
out.append(ny) ---> out.append(new)
beklager, jeg tilpassede lidt gammel kode.
Avatar billede speder2 Nybegynder
04. august 2002 - 20:23 #9
Cool - kan du lige give et eksempel på hvordan du kalder funktionen, hvis du f.eks. har:

String htmlnotencoded = "æøå"
Avatar billede =maddog= Nybegynder
04. august 2002 - 20:32 #10
replace(htmlnotencoded, (char) XX, "&oslash");
hvor XX repræsenterer tallet får ø. og så videre for de andre.
der er lidt arbejde i det.
du kan lave et lille testprogram og finde alle de tal du har brug for.
Avatar billede =maddog= Nybegynder
04. august 2002 - 20:33 #11
"&oslash"); --> "&oslash;");  KÆFT hvor det kører.
Jeg skal også have lavet en bean der kan lave al den slags tag filtrering. når jeg får tid.
Avatar billede jacobve Nybegynder
04. august 2002 - 20:43 #12
en anden måde at gøre det på kunne være således:

static String validHTML (String original)
{
    StringBuffer ny = new StringBuffer(original.length);
    char next;
    boolean special;

    for (int i = 0; i<original.length(); i++)
    {
        next.original.charAt(i);
        special = false;
       
        if (next=='>')
        {
            special=true;
            ny.append("&gt;");
        }
        if (next=='<')
        {
            special=true;
            ny.append("&lt;");
        }
        if (next=='&')
        {   
            special=true;
            ny.append("&amp;");
        }
        if (next=='"')
        {
            special=true;
            ny.append("&quot;");
        }
        if (next=='\'')
        {
            special=true;
            ny.append("&$#39;");
        }
        if (!special)
        {
            ny.append(next);
        }       
    }
    return ny.toString();
}
Avatar billede jacobve Nybegynder
04. august 2002 - 20:44 #13
skal lige siges at dette ikke er compileret og skrevet i nuet.
Avatar billede =maddog= Nybegynder
04. august 2002 - 20:49 #14
smart nok. kanske man kunne typecaste char til byte og lave en switch.
Avatar billede speder2 Nybegynder
04. august 2002 - 22:13 #15
Maddog - kan du ikke lige lave et svar, så jeg kan uddele nogle points?
Avatar billede =maddog= Nybegynder
04. august 2002 - 22:23 #16
ok
Avatar billede speder2 Nybegynder
04. august 2002 - 22:31 #17
Tak for hjælpen begge to. Jeg rodede lidt rundt og endte med dette:

<%!
  public String encodeHtml(String tag) {
    if (tag==null)
      return null;
    int length = tag.length();
    StringBuffer encodedTag = new StringBuffer(2 * length);
    for (int i=0; i<length; i++) {
      char c = tag.charAt(i);
      if (c=='<')
        encodedTag.append("&lt;");
      else if (c=='>')
        encodedTag.append("&gt;");
      else if (c=='&')
        encodedTag.append("&amp;");
      else if (c=='"')
        encodedTag.append("&quot;"); 
      else if (c==' ')
        encodedTag.append("&nbsp;");
      else if (c=='æ')
        encodedTag.append("&aelig;");
      else if (c=='ø')
        encodedTag.append("&oslash;");
      else if (c=='å')
        encodedTag.append("&aring;");
      else if (c=='Æ')
        encodedTag.append("&AElig;");
      else if (c=='Ø')
        encodedTag.append("&Oslash;");
      else if (c=='Å')
        encodedTag.append("&Aring;");   
      else
        encodedTag.append(c);

    }
    return encodedTag.toString();
  }
%>
Avatar billede jacobve Nybegynder
04. august 2002 - 22:34 #18
ok... godt du kunne bruge noget til inspiration :-)
Avatar billede =maddog= Nybegynder
04. august 2002 - 23:32 #19
jeg vidste ikke den åd 'å' osv. rart at vide.
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