ZoRaC Skrevet 7. mars 2007 Del Skrevet 7. mars 2007 (endret) Prøver å få til en metode for å sikre input fra brukere i JSP. Jeg har funnet ut at om jeg erstatter "spesialtegnet" med "spesialtegnet" så sikrer det inputen, men jeg får det ikke helt til. public static String filtrer(String tekst) { if(tekst == null) return null; StringBuffer resultat = new StringBuffer(tekst); for(int i=0; i < tekst.length(); i++) { char tegn = tekst.charAt(i); if (!(Character.isLetterOrDigit(tegn))) { resultat.replace(i, i+1, ""+tegn); } } return resultat.toString(); } Endret 15. mars 2007 av ZoRaC Lenke til kommentar
ZoRaC Skrevet 7. mars 2007 Forfatter Del Skrevet 7. mars 2007 Løste det: public static String filtrer(String tekst) { if(tekst == null) { return null; } final StringBuffer buf = new StringBuffer(); for (int i = 0; i < tekst.length(); i++) { char tegn = tekst.charAt(i); if (Character.isLetterOrDigit(tegn)) { buf.append(tegn); } else { buf.append("" + (int) tegn); } } return buf.toString(); } Lenke til kommentar
ZoRaC Skrevet 15. mars 2007 Forfatter Del Skrevet 15. mars 2007 (endret) Den var selvfølgelig ikke helt perfekt enda, nå sliter jeg med æ, ø og å, de blir nemlig ikke tolket som bokstaver, og det resulterer i rare tegn. Jeg tenkte derfor å legge til en metode for unntak, men denne fungerer ikke helt. public class InputFilter { private final static char[] unntak = { 'å', 'æ', 'ø', 'Å', 'Æ', 'Ø' }; public static String filtrer(String tekst) { if (tekst == null) { return null; } final StringBuffer buf = new StringBuffer(); for (int i = 0; i < tekst.length(); i++) { char tegn = tekst.charAt(i); if (Character.isLetterOrDigit(tegn) || Character.isWhitespace(tegn) || erUnntak(tegn)) { buf.append(tegn); } else { buf.append("" + (int) tegn); } } return buf.toString(); } public static String[] filtrer(String[] tekster) { if(tekster == null) return null; for(int i = 0; i < tekster.length; i++){ tekster[i] = filtrer(tekster[i]); } return tekster; } // Sjekker om tegnet er et av unntakene som ikke skal behandles private static boolean erUnntak(int tegn) { System.out.println("Test tegn: " + tegn); for (int i = 0; i < unntak.length; i++) { System.out.println("Unntaktest: " + (int)unntak[i]); if (tegn == (int)unntak[i]) { return true; } } return false; } } Når jeg kjører "å" inn i testen spytter den ut dette: Test tegn: 165Unntaktest: 229 Unntaktest: 230 Unntaktest: 248 Unntaktest: 197 Unntaktest: 198 Unntaktest: 216 Altså tolker den "å" som 229, men den "å'en" jeg sender inn blir til 165. Noen tips? Endret 15. mars 2007 av ZoRaC Lenke til kommentar
bærbar Skrevet 15. mars 2007 Del Skrevet 15. mars 2007 Du kan prøve å endre charset til iso-8859-1 eller utf-8 Det virker som om det er problemer med ascii som gjør at de tegnene der ikke tolkes rett Lenke til kommentar
ZoRaC Skrevet 15. mars 2007 Forfatter Del Skrevet 15. mars 2007 Hvordan gjør jeg det da? Vet jeg kan endre nettsiden sin koding, men jeg vil kunne bruke dette filteret både på iso-8859-1 og utf-8 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå