Avatar billede webhjaelp Nybegynder
23. april 2007 - 11:17 Der er 32 kommentarer og
1 løsning

Hvordan klipper jeg tags ud af sorcekode m.m.

Hej.
Vha. javascript i ASP:
hvordan klipper(fjerner) jeg tags ud af sorcekode og eksempelvis alt mellem <head> og </head> væk.
Avatar billede thesurfer Nybegynder
23. april 2007 - 11:26 #1
Se på funktionerne til strengmanipulation: http://www.w3schools.com/vbscript/vbscript_ref_functions.asp#string

Især: Left, Mid, Right, InStr

Generelt: http://www.w3schools.com/vbscript/vbscript_ref_functions.asp
Avatar billede fennec Nybegynder
23. april 2007 - 11:33 #2
Det er nok lidt et dumt spørgsmål, men hvorfor lader du ikke bare være med at udskrive de tags, i stedet for at klippe i koden bagefter??

Og det skal igennem ASP variabler for at det over hoved dur.
Dur ikke:
<html>
<head>
  ...
</head>
<% ASP kode %>

Dur:
<%
start = "<html><head>...</head>"
response.write start
%>

Også kan du med fordel gøre brug ag RegExp i stedet til at slette med. Det er meget mere dynamisk, men også sværre at arbejde med.
Avatar billede webhjaelp Nybegynder
23. april 2007 - 11:40 #3
I xmlhttp=createObject("Microsoft.XMLHTTP")
xmlhttp.responseText (med tags)
findes der uden tags(dvs. den tekst som vises)
Avatar billede fennec Nybegynder
23. april 2007 - 11:59 #4
Ahh, ok. Et eks med regExp:

htmlkode = xmlhttp.responseText()
Set Rx1 = New RegExp
Rx1.Global = True
Rx1.IgnoreCase = True
Rx1.Pattern = "<head>[\s\S]*?</head>"
htmlkode = Rx1.replace(htmlkode,"<head></head>")
Avatar billede webhjaelp Nybegynder
23. april 2007 - 13:12 #5
og hvad sker der helt præcist her
Avatar billede webhjaelp Nybegynder
23. april 2007 - 13:18 #6
>[\s\S]*?</
Avatar billede fennec Nybegynder
23. april 2007 - 13:31 #7
Det er styrken i RegExp du har fat i der.

[\s\S] Denne kode matcher hvad som helst (Tal, tegn, linjeskift, tabulator osv.) EN gang.
* Fortæller at den forrige kode skal matches 0-uendelig gange (altså ikke EN gang længere)
? gør * non-greedy. Hvis kildekoden f.eks var "<head>hej</head>med dig</head>" Afgøre ? om den skal finde "hej</head>med dig" eller kun "hej"

Hvis du vil lære mere om RegExp så tag et kik dens kategori her på E. RegExp findes desuden i næsten alle sprog, så har du først lært det, kan det bruges i alt fra .NET til PHP.
Avatar billede fennec Nybegynder
23. april 2007 - 13:39 #8
Mere specifikt så kan vi dele [\s\S] op i flere dele:

[] fortæller at alle tegn herinde skal den matche en af. Stod der f.eks [abc] ville den finde alle a, b eller c.
\s (lille s) er en kommando som matcher alle white-space. Det er f.eks space, linjeskift og tabulator
\S (stort s) er en kommando som matcher alle ikke white-space

[\s\S] bliver altså til at den skal matche alle white-space og alle ikke white-space. Hvilket vil sige alle tegn. I mange tilfælde bruger man bare . i stedet. Den matcher alle tegn, bortset fra linjeskift, men da der kan være linje skift i koden du får fra serveren, må vi bruge denne kode.
Avatar billede webhjaelp Nybegynder
23. april 2007 - 13:45 #9
hvis jeg vil lave 4 variable:
titel fra title-tag
titel fra meta-tag
description fra meta-tag
tekst uden tags fra body

hvordan gør jeg dette
Avatar billede webhjaelp Nybegynder
23. april 2007 - 13:45 #10
hvis jeg har sorcekoden
Avatar billede fennec Nybegynder
23. april 2007 - 14:06 #11
Så skal vi have gang i gem funktionen også. Denne burde trække titlen ud:

htmlkode = xmlhttp.responseText()
Set Rx1 = New RegExp
Rx1.Global = True
Rx1.IgnoreCase = True
Rx1.Pattern = "[\s\S]*<title>([\s\S]*?)</title>[\s\S]*"
title = Rx1.replace(htmlkode,"$1")

Til meta tags burde det være noget ala:
htmlkode = xmlhttp.responseText()
Set Rx1 = New RegExp
Rx1.Global = True
Rx1.IgnoreCase = True
Rx1.Pattern = "[\s\S]*<meta NAME=""title"" CONTENT=""([\s\S]*?)"">[\s\S]*"
metatitle = Rx1.replace(htmlkode,"$1")

Tekst uden tags fra body kan jeg ikke lige klare, men jeg ved der findes regExp til at fjerne tags. Den må du kunne få hjælp til i regExp kategorien i stedet.
Avatar billede webhjaelp Nybegynder
23. april 2007 - 15:23 #12
jeg får meta titlen men også følgende:
/>
<meta http-equiv="Cache-Control" content="no-store" />
<meta http-equiv="Content-language" content="dan" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8"  />
<meta http-equiv="Expires" content="Mon, 23 Apr 2007 15:20:38 GMT"  />
<meta http-equiv="Pragma" content="no-cache" />
<link rel="stylesheet" href="http://d.jubii.dk/rd/css/jubii20060929.css" type="text/css" media="all
Avatar billede fennec Nybegynder
23. april 2007 - 15:28 #13
Ahh, fordi der er / på:

Rx1.Pattern = "[\s\S]*<meta NAME=""title"" CONTENT=""([\s\S]*?)"" />[\s\S]*"
Avatar billede webhjaelp Nybegynder
23. april 2007 - 15:50 #14
derefter får jeg:
/>
<meta http-equiv="Cache-Control" content="no-store

hvordan sletter jeg specifikt:
<script language="JavaScript" type="text/javascript"> eller
<script type="text/javascript">
indtil, og begge inklusiv.
</script>
og det samme med:
<style type="text/css">
</style>
Avatar billede fennec Nybegynder
23. april 2007 - 16:04 #15
Ser ud som om der er problemer med mellemrum/ingen mellemrum i slutningen af metatags. Så laver vi da bare en som er ligeglad:
Rx1.Pattern = "[\s\S]*<meta NAME=""title"" CONTENT=""([\s\S]*?)"".*?>[\s\S]*"

Sletning af scriptblokke gør du ud fra koden i post 11:59:09:

htmlkode = xmlhttp.responseText()
Set Rx1 = New RegExp
Rx1.Global = True
Rx1.IgnoreCase = True
Rx1.Pattern = "<script.*?>[\s\S]</script>"
htmlkode = Rx1.replace(htmlkode,"")

Og styles er:
Rx1.Pattern = "<style.*?>[\s\S]</style>"
Avatar billede fennec Nybegynder
23. april 2007 - 16:06 #16
Der var lige en fejl. Manglede *?

Rx1.Pattern = "<script.*?>[\s\S]*?</script>"
Rx1.Pattern = "<style.*?>[\s\S]*?</style>"
Avatar billede webhjaelp Nybegynder
23. april 2007 - 16:28 #17
"  />
<meta http-equiv="Cache-Control" content="no-store

stadig
Avatar billede webhjaelp Nybegynder
23. april 2007 - 16:32 #18
htmlkode = xmlhttp.responseText()
Set Rx1 = New RegExp
Rx1.Global = True
Rx1.IgnoreCase = True
Rx1.Pattern = "<script.*?>[\s\S]</script>"
htmlkode = Rx1.replace(htmlkode,"")

gav strengkonstanten er uafsluttet, til Rx1.Pattern = "<script.*?>[\s\S]</script>"
linien.
Avatar billede webhjaelp Nybegynder
23. april 2007 - 16:35 #19
"<style.*?>[\s\S]*?</style>" virker men den anden virker ikke!!!
Avatar billede webhjaelp Nybegynder
23. april 2007 - 20:10 #20
[\s\S]</script>"
Ovenstående kan ikke udkommenteres, kan det have noget med dette at gøre.
Avatar billede fennec Nybegynder
24. april 2007 - 08:40 #21
Har du rette det det den fra post 23/04-2007 16:06:16 ??
Det skal være:
Rx1.Pattern = "<script.*?>[\s\S]*?</script>"

Hvor der er *? efter [\s\S]
Avatar billede webhjaelp Nybegynder
24. april 2007 - 09:20 #22
Den giver stadig:
strengkonstanten er uafsluttet i denne linie:
Rx1e.Pattern "<script.*?>[\s\S]*?</script>"
Avatar billede webhjaelp Nybegynder
24. april 2007 - 09:42 #23
det er som om browseren tror at der er et " i "<script.*?>Å[\s\S]*?</script>"
der hvor jeg har sat Å

kan man ikke lave et Pattern som ser anderledes ud
Avatar billede fennec Nybegynder
24. april 2007 - 09:54 #24
Har du "=" tagnet med. Den kode du har skrevet (09:20:12):
Rx1e.Pattern "<script.*?>[\s\S]*?</script>"

Det skal være:
Rx1e.Pattern = "<script.*?>[\s\S]*?</script>"
Avatar billede webhjaelp Nybegynder
24. april 2007 - 10:03 #25
ja, jeg har = med

øverst på siden skriver den:
" htmlkode = Rx1e.replace(htmlkode,"") + en masse kode som står under denne linie.

Jeg tror jeg har fundet ud af hvorfor det ikke virker.

Koden står mellem script tags, kan dette ikke have noget med det at gøre.
Avatar billede webhjaelp Nybegynder
24. april 2007 - 10:07 #26
Ja det var derfor:
"<scri.*?>[\s\S]*?</scri.*?>"
denne gør det rigtigt.
Tak for hjælpen, smid et svar så du kan få points.

Denne fjerner tags gennerelt:
Set Rx2 = New RegExp
        Rx2.Global = True
        Rx2.IgnoreCase = True
        Rx2.Pattern = "<[^>]*>"
        RemoveHTML = Rx2.replace(htmlkode, "")

blot til information.....
Avatar billede fennec Nybegynder
24. april 2007 - 10:12 #27
.o) <-- One Eyed Jack
Avatar billede webhjaelp Nybegynder
24. april 2007 - 10:16 #28
Inden du smutter.
Kunne man gøre noget ved :
Title-tag:
Jubii - Forsiden

Meta titel:
Jubii - Forsiden"  />
<meta http-equiv="Cache-Control" content="no-store

Meta desc.:
Din startside"  />
<meta name="Keywords" content="Jubii, Portal, Startside, Forside, Jubi, Jubbi" />
<meta name="Rating" content="General"  />
<meta name="Revisit-after" content="1" />
<meta name="Robots" content="ALL" />
<meta name="Title" content="Jubii - Forsiden"  />
<meta http-equiv="Cache-Control" content="no-store" />
<meta http-equiv="Content-language" content="dan" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8"  />
<meta http-equiv="Expires" content="Tue, 24 Apr 2007 10:14:17 GMT"  />
<meta http-equiv="Pragma" content="no-cache" />
<link rel="stylesheet" href="http://d.jubii.dk/rd/css/jubii20060929.css" type="text/css" media="all

de ekstra linier som er med i det ovenstående
Avatar billede webhjaelp Nybegynder
24. april 2007 - 10:17 #29
i meta titel og meta desc.
Avatar billede fennec Nybegynder
24. april 2007 - 10:28 #30
Burde virke med den jeg lavede i post 23/04-2007 16:04:22:
Rx1.Pattern = "[\s\S]*<meta NAME=""title"" CONTENT=""([\s\S]*?)"".*?>[\s\S]*"

Samme virker til de andre metatag. Bare ændre title.
Avatar billede webhjaelp Nybegynder
24. april 2007 - 10:30 #31
Jeg har brugt:
Rx1b.Pattern = "[\s\S]*<meta NAME=""title"" CONTENT=""([\s\S]*?)"" />[\s\S]*"
Rx1c.Pattern = "[\s\S]*<meta NAME=""Description"" CONTENT=""([\s\S]*?)"">[\s\S]*"


i det ovenstående eksempel.
Avatar billede fennec Nybegynder
24. april 2007 - 10:47 #32
Rx1b.Pattern = "[\s\S]*<meta NAME=""title"" CONTENT=""([\s\S]*?)"".*?>[\s\S]*"
Rx1c.Pattern = "[\s\S]*<meta NAME=""Description"" CONTENT=""([\s\S]*?)"".*?>[\s\S]*"
Avatar billede webhjaelp Nybegynder
24. april 2007 - 10:54 #33
Perfekt......

Tak for den stor hjælp.....
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