Avatar billede baitianlong Nybegynder
26. marts 2009 - 13:31 Der er 7 kommentarer og
1 løsning

Ampersand og URL encoding problemer

Jeg har en database, hvor teksterne er ampersand encoded. Det vil sige visse special tegn hedder f.eks ሴ

Nar jeg henter teksten og viser paa en jsp side, er det jo glimrende, men hvis jeg laver links, hvor ord med specialtegn indgaar i querystring'en, er der problemer. Det kan baade vaere simple apostroffer eller kinesiske skrifttegn.

Derfor skal jeg bruge noget java kode, som kan omdanne Ampersand encoding til URL encoding... Er der nogen, der har en ide til det?
Avatar billede arne_v Ekspert
26. marts 2009 - 13:56 #1
URLEncoder.encode(s, "UTF-8") eller URLEncoder.encode(s, "ISO-8859-1") vil encode en vaerdi (paa trods af navnet er det en vaerdi ikke en hel URL !).
Avatar billede arne_v Ekspert
26. marts 2009 - 14:00 #2
Entities maa kunne decodes med noget a la:

    private static final Pattern p = Pattern.compile("&#x([0-9A-F]+)");
    public static String Unentity(String s) {
        String res = s;
        Matcher m = p.matcher(res);
        while(m.find()) {
            res = res.replaceAll(m.group(0), Character.toString((char)Integer.parseInt(m.group(1), 16)));
        }
        return res; 
    }

Bemaerk: utestet.
Avatar billede baitianlong Nybegynder
26. marts 2009 - 15:13 #3
Det er til at blive sindssyg over...

Hvis jeg har ordet "Dato'" (en malaysisk aeres-titel), har jeg den som Dato’

Hvis jeg koerer din metode paa ordet, bliver den fint nok lavet om til ' igen. Hvis jeg saa URLEncoder med UTF-8 paa ordet bliver det til:

Dato%E2%80%99

Men paa siden, jeg linker til bliver det til:

Dato’
Avatar billede baitianlong Nybegynder
26. marts 2009 - 15:15 #4
Det vises dog som Dato + et a med circonflex + to firkanter
Avatar billede baitianlong Nybegynder
26. marts 2009 - 18:32 #5
Hej Arne,

Jeg har testet frem og tilbage og sjovt nok virker noget af encodingen paa nogle af mine venners computer.

Din metode til at Ampersand decode er smuk, mit problem er at min computer aabenbart vaelger et forkert karaktersaet til unicode i visse tilfaelde.

Jeg har testet med:

side1:

<a href="side2.jsp?word=Dato%E2%80%99">LINK</a>

side2:

<%
out.write(request.getParameter("word") + "<br>");
out.write(URLDecoder.decode(request.getQuerystring(), "UTF-8"));
%>

Underligt nok giver det en side som siger:

Dato + mystisk a + firkanter
word=Dato'

Og det samme er resultatet hvis jeg blot skriver:

<a href="side2.jsp?word=Dato'">LINK</a>

Altsaa alting virker hvis jeg URLdecoder querystringen manuelt, men hvis jeg bare tager variablen virker det ikke....

Du er mere end velkommen til at kommentere, men du kan ogsaa smide et svar :)
Avatar billede arne_v Ekspert
27. marts 2009 - 02:58 #6
Jeg har leget lidt med forskellige browsere og forskellige charset.

Nogle kombinationer giver samme fejl som dig andre virker.

????

Hvis jeg får tid til det vil jeg muligvis kigge lidt mere på det.

Her er ihvertfald et svar.
Avatar billede arne_v Ekspert
27. marts 2009 - 02:59 #7
(og du fandt ud af at indsætte det manglende semikolon i regex'en)
Avatar billede baitianlong Nybegynder
27. marts 2009 - 09:34 #8
Jep, jeg kunne se det stadig var i den decodede version, saa jeg puttede det ind i regexen. Min eneste maade at lave dette sikkert paa alle maskiner (isaer i asien) er at substring(querystring), saa det maa jeg goere... Tak for hjaelpen igen :)
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