Avatar billede subscorpio Nybegynder
16. august 2007 - 10:09 Der er 18 kommentarer og
3 løsninger

Forkort links til grund domænet, men kun hvis de er for lange.

Kære Eksperter!

Jeg bruger nedenstående til at få links, emails til at linke automatisk på min asp hjemmeside.

Jeg kunne dog godt tænke mig at koden blev modificeret, således at hvis en bruger skriver et langt link (over 45 tegn), så omskriver den koden således at linket kun bliver vist i ”grunddomænet” men stadig linker til den lange smører.

Altså:
www.etellerandet.dk/test/?test=test&test2=test5
Vil så blive udskrevet som:

www.etellerandet.dk – men når man klikker på det, er det den url ovenover man kommer over til.

Jeg er ikke særlig stærk i Reg.Exp. – så en pædagogisk løsning vil være dejligt - jeg har oprettet spørgsmålet under "Reg.Exp." men har ikke fået noget respons, så nu prøver jeg her.
--- --- --- ---
Function makelink(str)
Set objRegExpHTTP1 = New RegExp
objRegExpHTTP1.Global = True
objRegExpHTTP1.IgnoreCase = True
objRegExpHTTP1.Pattern = "(http|ftp|https)(:\/\/[\w]+)(.[\w]+)([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?"
strOutput = objRegExpHTTP1.Replace(str, "<a href='$1$2$3$4' target='_blank'>$1$2$3$4</a>")

objRegExpHTTP1.Pattern = "(^|[^\/])(www)(.[\w]+)([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?"
strOutput = objRegExpHTTP1.Replace(strOutput, " $1<a href='http://$2$3$4' target='_blank'>$2$3$4</a>")
objRegExpHTTP1.Pattern = "(\S+@{1}\S+\.[a-z][a-z]+\b)"
strOutput = objRegExpHTTP1.Replace(strOutput, "<a href="&chr(34)&"mailto:$1"&chr(34)&">$1</a>")
set objRegExpHTTP1 = Nothing
makelink = strOutput
End Function
--- --- --- ---
Avatar billede cpufan Juniormester
16. august 2007 - 17:50 #1
str = "www.etellerandet.dk/test/?test=test&test2=test5"

if instr(str,"/")>0 then
longlink = str
nystr = split(str,"/")
shortlink = nystr(0)
else
longlink = str
shortlink = str
end if

response.write "<a href="'&longlink&"'>"&shortlink&"</a>"
Avatar billede cpufan Juniormester
16. august 2007 - 17:57 #2
og som funktion


function makelink(str)
longlink = str
if instr(str,"/")>0 then
nystr = split(str,"/")
shortlink = nystr(0)
else
shortlink = str
end if
makelink = "<a href="'&longlink&"'>"&shortlink&"</a>"
end function
Avatar billede fennec Nybegynder
17. august 2007 - 10:54 #3
Det er vel ikke så nemt som så. Funktionen bruges vel på strenge af denne type:

str = "Her har jeg et link http://domæne.dk/index.asp og en email mail@mig.dk"
Avatar billede fennec Nybegynder
17. august 2007 - 10:58 #4
Hvis jeg skulle lave dette, ville jeg enten konsekvens fjerne resten af linket, eller indsætte et "link" tekst med en alt tekst:

1: (kun domæne)
strOutput = objRegExpHTTP1.Replace(str, "<a href='$1$2$3$4' target='_blank'>$1$2$3</a>")

2: ("link" med alt attribut)
strOutput = objRegExpHTTP1.Replace(str, "<a href='$1$2$3$4' alt='$1$2$3$4' target='_blank'>link</a>")
Avatar billede cpufan Juniormester
17. august 2007 - 11:11 #5
åhja, jeg havde overset http://

men jeg kan da lappe lidt på funktionen så..
email er normalt ikke så lang, så den har jeg valgt at se bort fra.

function makelink(str)
str = replace(str,"http://","")
longlink = str
if instr(str,"/")>0 then
nystr = split(str,"/")
shortlink = nystr(0)
else
shortlink = str
end if
makelink = "<a href="'&longlink&"'>"&shortlink&"</a>"
end function
Avatar billede subscorpio Nybegynder
17. august 2007 - 20:27 #6
Tak for de gode svar :-)
Cpufan: Jeg har ikke testet din løsning endnu – men jeg kan hellere ikke lige gennemskue hvordan den kan arbejde sammen med mit overstående script.
Kan du indskrive det i mit script, så kan jeg lige teste det efter :)

Husk også at nogle lange links ikke nødvendigvis har en ”/” for at være lange.
f.eks. www.eksperten.dk?test=test&test2=test2&test3&=test3

Fennec: Jeg rodede selv med samme løsning først, men et link der bare hedder ”link” tror jeg ikke virker så lokkende for folk at trykke på.
Men det har fået mig til at tænke at jeg evt. bare skal replace alle links lige meget deres længde, til grund domænet, og så med en ”<a title=” hvor hele linket står” – kan man lave sådan en løsning?
Avatar billede cpufan Juniormester
17. august 2007 - 23:01 #7
min funktion er bare tænkt som et alternativ til den du har i forvejen,
så det er meningen du bare skal smide url'en igennem funktionen
så forkortes den.

og for at tage højde for den utraditionelle url du har opgivet nu,
skal der lige tilføjes lidt til funktionen:

function makelink(str)
str = replace(str,"http://","")
longlink = str
if instr(str,"/")>instr(str,"?") then
nystr = split(str,"?")
shortlink = nystr(0)
else
if instr(str,"/")<instr(str,"?") then
  nystr = split(str,"/")
  shortlink = nystr(0)
else
  shortlink = str 
end if
end if
makelink = "<a href="'&longlink&"'>"&shortlink&"</a>"
end function
Avatar billede subscorpio Nybegynder
18. august 2007 - 13:17 #8
fennec, jeg har testet dit forslag
"strOutput = objRegExpHTTP1.Replace(str, "<a href='$1$2$3' target='_blank'>$1$2$3</a>")"
Men at fjerne "$4" giver ikke noget andet link hos mig :-/

Cpufan: jeg har testet din kode og det lader ikke til at virke - men jeg er heller ikke interesseret i et "alternativt", men en udbyggelse af min ovenstående kode.
Avatar billede fennec Nybegynder
20. august 2007 - 10:25 #9
Nu tjekkede jeg ikke den nærmere kode af din RegExp, hvilket jeg har gjort nu. Jeg har så prøvet at lave en regexp som kun udtrækker domænet, men det overstiger mine ævner. Jeg kan godt klare dem enkeltvis, men den skal jo klares i alle disse afskygninger (+ sikkert endnu flere):

www.domæne.dk/index.asp
http://domæne.dk/index.asp
http://www.domæne.dk/index.asp
www.domæne.dk/index.asp?ID=1
http://domæne.dk/index.asp?ID=1
http://www.domæne.dk/index.asp?ID=1
www.domæne.dk/
http://domæne.dk/
http://www.domæne.dk/
www.domæne.dk
http://domæne.dk
http://www.domæne.dk

Og det er mere end jeg kan klare.

Jeg har derfor kun den løsning hvor hele linket bliver erstattet af "link"
strOutput = objRegExpHTTP1.Replace(str, "<a href='$1$2$3$4' alt='$1$2$3$4' target='_blank'>link</a>")
Avatar billede subscorpio Nybegynder
21. august 2007 - 20:55 #10
Jeg er taknemlig for at I forsøgte - kan jeg på en eller anden måde give jer 20 points hver?
Ved godt det ikke er meget, men det er mere et symbol på at jeg er glad for at I forsøgte at hjælpe mig :D
Avatar billede fennec Nybegynder
22. august 2007 - 09:59 #11
Det kan du godt. Der er et "Advanceret" punkt et eller andet sted i venstre side. Der kan du tildele point manuelt, så de ikke automatisk bliver delt mellem dem som svare.

Vi skal så alle smide et svar (også dig selv, da du jo skal have de resterende point)

.o) <-- One Eyed Jack
Avatar billede subscorpio Nybegynder
22. august 2007 - 10:48 #12
Jeg prøver lige ad ;)
Avatar billede subscorpio Nybegynder
22. august 2007 - 10:50 #13
Det er jo ski* smart ;-)
Avatar billede fennec Nybegynder
22. august 2007 - 11:23 #14
Det er det nemlig :o)
Avatar billede cpufan Juniormester
22. august 2007 - 11:38 #15
det er altid en god ide at teste sit lort inden man smider det ud her på eksperten :o)

Så det har jeg lige gjort...... bedre sent end aldrig..
hvilket så resulterede i at der var en del rettelser ;-)

men følgende funktion virker:

<%
function makelink(str)
str = replace(str,"http://","")
longlink = str
if instr(str,"/")<instr(str,"?") then
nystr = split(str,"?")
shortlink = nystr(0)
else
if instr(str,"/")>instr(str,"?") then
  nystr = split(str,"/")
  shortlink = nystr(0)
else
  shortlink = str 
end if
end if
makelink = "<a href="&longlink&">"&shortlink&"</a>"
end function

response.write makelink("www.eksperten.dk?test=test&test2=test2&test3&=test3")
%>

jeg ved godt du skrev at du ikke var interesseret i et alternativ - men her er det altså alligevel - og den virker  på alle ovenstående domæner
Avatar billede cpufan Juniormester
22. august 2007 - 11:41 #16
hmmm der skulle lige byttes rundt på 2 linier (tsk tsk)

<%
function makelink(str)
longlink = str
str = replace(str,"http://","")
if instr(str,"/")<instr(str,"?") then
nystr = split(str,"?")
shortlink = nystr(0)
else
if instr(str,"/")>instr(str,"?") then
  nystr = split(str,"/")
  shortlink = nystr(0)
else
  shortlink = str 
end if
end if
makelink = "<a href="&longlink&">"&shortlink&"</a>"
end function

response.write makelink("www.eksperten.dk?test=test&test2=test2&test3&=test3")
%>
Avatar billede cpufan Juniormester
22. august 2007 - 11:44 #17
for høvlede..... det driller fortsat - nå men nu er den der

function makelink(str)
str = replace(str,"http://","")
longlink = str
if instr(str,"/")<instr(str,"?") then
nystr = split(str,"?")
shortlink = nystr(0)
else
if instr(str,"/")>instr(str,"?") then
  nystr = split(str,"/")
  shortlink = nystr(0)
else
  shortlink = str 
end if
end if
makelink = "<a href=http://"&longlink&">"&shortlink&"</a>"
end function
Avatar billede subscorpio Nybegynder
22. august 2007 - 11:49 #18
cpufan > Kan du skrive den samme med min kode?
Jeg vil jo stadig gerne have at mine emails mm mere linker ;)

Sådan så så følgende virker:

response.write makelink("Hey tjek lige denne her side: www.eksperten.dk?test=test&test2=test2&test3&=test3 er den ikke bare mega fed? btw er min mail-adresse test@test.dk mail mig hvis du er frisk")

(kan du følge mig?)
Avatar billede cpufan Juniormester
22. august 2007 - 12:04 #19
jeg kan følge dig, men

det bliver meget tungt og vil dø en langsom død hvis der er mange kald til funktionen på siden - så der melder jeg pas.

fordi du skal tjekke hvert ord for om det er en url eller emailadr. og som før nævnt er der rigtig mange muligheder.

der melder jeg pas desværre -
Avatar billede subscorpio Nybegynder
22. august 2007 - 12:54 #20
Men mon ikke man kan få den til kun at kalde din function frem, hvis den antager noget for at være et link.
altså hvis den falder ind under min function, skal den lige kører igennem din også - kan du følge mig?
Avatar billede fennec Nybegynder
22. august 2007 - 12:57 #21
Det kan man ikke... RegExp kan ikke blandes med en ASP funktion :(
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