Avatar billede axkris Nybegynder
24. juni 2004 - 14:51 Der er 15 kommentarer og
1 løsning

Slet script-tags (VB)

Hej

Jeg er ved at lave et vb-script, som skal slette alle script-tags fra en streng med kode.

Kan du hjælpe mig med resten?

Function StripScript(ByRef asHTML)
    Set regEx = New RegExp
    regEx.IgnoreCase = True
    regEx.Global = True
    regEx.Pattern = "(<script??????script>)"
    StripScript = regEx.Replace(asHTML, "")
    Set regEx = Nothing
End Function
Avatar billede roenving Novice
24. juni 2004 - 15:02 #1
regEx.Pattern = "(<script[^<]*<\/script>)"
Avatar billede axkris Nybegynder
24. juni 2004 - 15:11 #2
Den virker ikke i alle tilfælde - f.eks. ikke ved nedenstående kode (altså det html-kode mv som ligger i strengen):

<script language="JavaScript"><!--
MSFPhover =
  (((navigator.appName == "Netscape") &&
  (parseInt(navigator.appVersion) >= 3 )) ||
  ((navigator.appName == "Microsoft Internet Explorer") &&
  (parseInt(navigator.appVersion) >= 4 )));
function MSFPpreload(img)
{
  var a=new Image(); a.src=img; return a;
}
// --></script>
Avatar billede roenving Novice
24. juni 2004 - 15:21 #3
Hrm, tjah ...

regEx.Pattern = "(<script[^>]*>(<\/script>)?)"

-- den skal nok stress-testes ...
Avatar billede roenving Novice
24. juni 2004 - 15:22 #4
Øv, negeringstingen skulle jo være dobbelt:

regEx.Pattern = "(<script[^>]*>[^>]*>(<\/script>)?)"
Avatar billede axkris Nybegynder
24. juni 2004 - 15:43 #5
Hymm, dit sidste eksempel virker heller ikke. F.eks. bliver outputtet ved følgende kode (fra strengen):

<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
function clock() {
if (!document.layers && !document.all) return;
var digital = new Date();
var def = (digital.getTimezoneOffset()/60)+2;
var hours = (digital.getHours() + def);
var minutes = digital.getMinutes();
var day = digital.getUTCDate();
var amOrPm = "AM";

if (hours > 23) day = day+1;
digital.setUTCDate(day);
var day = digital.getUTCDate();
var month = digital.getUTCMonth();
.
.
.
.
.
//  End -->
</script>

Output:
> 23) day = day+1; digital.setUTCDate(day); var day = digital.getUTCDate(); var month = digital.getUTCMonth(); switch(month) { case 0: amonth="Jan " break; case 1: amonth="Feb " break; case 2: amonth="Mar " break; case 3: amonth="Apr " break; case 4: amonth="May " break; case 5: amon.........
Avatar billede axkris Nybegynder
24. juni 2004 - 15:44 #6
Men andre ord, den står af, når den kommer til større-end-tegnet.
Avatar billede roenving Novice
24. juni 2004 - 15:53 #7
Tjoeh ...

Det er en nød at knække ...

Skriver du selv dine koder, så vi kan lægge en identifikator ind (altså en tekst-streng vi kan genkende ?-)

Hvis man bruger den simple udgave, tror jeg, at man får problemer med flere scripts:

regEx.Pattern = "(<script.*<\/script>)"
Avatar billede axkris Nybegynder
24. juni 2004 - 15:56 #8
Der er ikke tale om egne script, da jeg er ved at lave et system, hvor folk kan oprette deres link til deres hjemmeside, på min hjemmeside. Og dertil skal deres grabbes noget tekst, som er meget smart for dem, som ikke kan copy/paste.

Jeg tester lige din sidste kode :)
Avatar billede axkris Nybegynder
24. juni 2004 - 16:08 #9
Din sidste kode virker heller ikke, MEN kan man ikke bare lave et andet reg.exp.-script, som starter med at køre strengen igennem og fjerner de tegn mv, som skaber problemer, hvorefter det endelige script køres igennem og løser opgaven.

Altså et lille script som fjerner alle < og > som IKKE står i script-tagget (altså script-taggets start og slutning).

Der er jo ikke tale om at vi skal være sød over for script-taggene, da intet af det skal bruges til noget, så at man vandaliserer indeholdet i script-tagget er jo underordnet - det skal bare væk, altså sammen, så kun den rene tekst står tilbage.

Kan man i stedet gøre det på den måde?
Avatar billede roenving Novice
24. juni 2004 - 16:27 #10
Man kan måske gøre det på den måde, at man først tester for en forekomst af nogle tegn, som er usandsynlige, og når man så finder et tegn, som ikke forekommer på hjemmesiden erstatter man </script> med det og bruger dette tegn i negeringen ...

Lidt omstændeligt, men nok en farbar vej !-)

Og tegn, jeg kan komme på, som ikke er alt for sandsynlige:

¨
~
¤
§
^
`
´

-- hvis du prøver dem i nogenlunde den rækkefølge, kan du nok finde een af dem, som slet ikke forekommer, så det tegn kan bruges til at erstatte tagget, og derefter bruges sådan:

regEx.Pattern = "(<script[^\¨]*\¨"

-- da nogle af de ovenstående tegn skal escapes, hvis de skal bruges, er det nok sikrest at escape under alle omstændigheder ...
Avatar billede roenving Novice
24. juni 2004 - 16:39 #11
Hov, jeg fik også slettet parantesen, den skal jo være der:

regEx.Pattern = "(<script[^\¨]*\¨)"
Avatar billede axkris Nybegynder
24. juni 2004 - 16:39 #12
Det var noget af en omgang :)

Kan man ikke bare gøre det på den måde, at man starter med at slette alle < og > tegn.

replace(streng, "<", "")
replace(streng, ">", "")

Og så:

regEx.Pattern = "(script??????\/script)"

Så opstår der bare en problem, hvis der bliver oprettet en hjemmeside, som faktisk omtaler ordet "script", men da det er meget urealistisk for mine brugere (er langt fra edb-folk), så tror jeg nok, at den holder vand. (Jeg har i forvejen fjernet alle andre tags, og jeg tager kun fra bodyen jeg tager koden, så det er kun script-taget tilbage, som driller).

Men jeg kender ikke noget til reg.exp. så kan du ikke hjælpe mig med at lave et reg.exp.-script, som sletter alle < og > tegn samt lave et reg.exp.-script, som sletter alt mellem "script" og "/script"?
Avatar billede roenving Novice
24. juni 2004 - 16:44 #13
Problemet er, at den eneste sikre måde, du kan bruge er negeringstingen: [^¨] ...

For med den anden får du problemer, hvis der er flere scripts på en side, hvilket bestemt ikke er usandsynligt !-)
Avatar billede axkris Nybegynder
24. juni 2004 - 17:48 #14
Sorry, overså lige din kommentar 16:39:07

Nu virker det - mange mange tak for hjælpen :-D

Tryk svar :-D
Avatar billede roenving Novice
27. juni 2004 - 16:27 #15
Velbekomme '-)
Avatar billede roenving Novice
28. juni 2004 - 15:59 #16
-- og tak for point ;~}
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