Avatar billede mrvedel Nybegynder
28. december 2008 - 13:32 Der er 20 kommentarer

Max længde - MakeLink script

Halløj Eksperter...

Jeg bruger pt. det kendte MakeLink script som nedenstående, men ønsker at sætte en maks længde på selve linket hvis det eksempelvis er over 30 tegn...

Jeg benytter følgende:
function MakeLink(str)
    '*** Make the reqular expr object
    Set objRegExp = New RegExp
    objRegExp.IgnoreCase = True
    objRegExp.Global = True
   
    'Replace trailing spaces with " "
    objRegExp.Pattern = "(\s) "
    str = objRegExp.Replace(str,"$1 ")
   
    '***Make html links
    objRegExp.Pattern = "(\bhttp\:\/\/)?(\bw{3}\.\S+\.[a-z][a-z]+\b)(\/\S+\b)?(\?\S+\b)?"
    str = objRegExp.Replace(str, "<a target='_blank' href="&chr(34)&"http://$2$3$4"&chr(34)&">$1$2$3$4</a>")
   
    objRegExp.Pattern = "(^|[^\/])(w{3}\.\S+\.[a-z][a-z]+\b)(\/\S+\b)?(\?\S+\b)?"
    str = objRegExp.Replace(str, "$1<a href="&chr(34)&"http://$2$3$4"&chr(34)&" target='_blank'>$2$3$4</a>")

    '***Make html mailto
    objRegExp.Pattern = "(\S+@{1}\S+\.[a-z][a-z]+\b)"
    str = objRegExp.Replace(str, "<a href="&chr(34)&"mailto:$1"&chr(34)&">$1</a>")
    Set objRegExp = Nothing
    makelink = str
end function


Jeg har forsøgt med left(str, 20) men uden held...
Den retunerer blot $1$2$3$4

Hvordan kan jeg få den til at retunerer ønsket længde således:
<a href="LANG URL"><%= left(LANG URL, 20)%></a>

??
Avatar billede mortvader Nybegynder
28. december 2008 - 21:23 #1
Nu kender jeg ikke rigtig til den der RegExp, men prøv at erstatte linien:

str = objRegExp.Replace(str, "$1<a href="&chr(34)&"http://$2$3$4"&chr(34)&" target='_blank'>$2$3$4</a>")

med:

lnktxt=left(objRegExp.Replace(str, "$2$3$4"),20)
str = objRegExp.Replace(str, "$1<a href="&chr(34)&"http://$2$3$4"&chr(34)&" target='_blank'>%placeholder%%</a>")
replace(str,"%placehoder%",lnktxt)
Avatar billede mrvedel Nybegynder
29. december 2008 - 10:13 #2
Hmmmm....

Den melder følgende:
Microsoft VBScript compilation error '800a0414'
Cannot use parentheses when calling a Sub

Har indsat følgende:
lnktxt=left(objRegExp.Replace(str, "$2$3$4"),20)
str = objRegExp.Replace(str, "$1<a href="&chr(34)&"http://$2$3$4"&chr(34)&" target='_blank'>%placeholder%</a>")
replace(str,"%placeholder%",lnktxt)
Avatar billede mortvader Nybegynder
29. december 2008 - 10:46 #3
som fejlen siger kalder du en sub, hvor du bruger en parantes.
får du ikke et linienummer på hvor fejlen opstod?
Avatar billede mrvedel Nybegynder
29. december 2008 - 12:11 #4
Den melder:
Microsoft VBScript compilation error '800a0414'

Cannot use parentheses when calling a Sub

/viggo/includes/makelink.asp, line 21

replace(str,"%placeholder%",lnktxt)
-----------------------------------^

Det er vel pga. placeholderen?
Avatar billede mortvader Nybegynder
29. december 2008 - 12:43 #5
Nej, det er ikke pga placeholderen..

har du en sub der hedder replace, som den bruger i stedet for ASP-funktionen "replace"?
Avatar billede mrvedel Nybegynder
29. december 2008 - 13:10 #6
Hmmm.... Ikke hvad jeg ved af...
Dette er hele koden hvor jeg har indsat din kode:

function MakeLink(str)
    '*** Make the reqular expr object
    Set objRegExp = New RegExp
    objRegExp.IgnoreCase = True
    objRegExp.Global = True
   
    'Replace trailing spaces with "&nbsp;"
    objRegExp.Pattern = "(\s) "
    str = objRegExp.Replace(str,"$1&nbsp;")
   
    '***Make html links
    objRegExp.Pattern = "(\bhttp\:\/\/)?(\bw{3}\.\S+\.[a-z][a-z]+\b)(\/\S+\b)?(\?\S+\b)?"
    str = objRegExp.Replace(str, "<a target='_blank' href="&chr(34)&"http://$2$3$4"&chr(34)&">$1$2$3$4</a>")
   
    objRegExp.Pattern = "(^|[^\/])(w{3}\.\S+\.[a-z][a-z]+\b)(\/\S+\b)?(\?\S+\b)?"
    'str = objRegExp.Replace(str, "$1<a href="&chr(34)&"http://$2$3$4"&chr(34)&" target='_blank'>$2$3$4</a>")

lnktxt=left(objRegExp.Replace(str, "$2$3$4"),20)
str = objRegExp.Replace(str, "$1<a href="&chr(34)&"http://$2$3$4"&chr(34)&" target='_blank'>%placeholder%</a>")
replace(str,"%placeholder%",lnktxt)

    '***Make html mailto
    objRegExp.Pattern = "(\S+@{1}\S+\.[a-z][a-z]+\b)"
    str = objRegExp.Replace(str, "<a href="&chr(34)&"mailto:$1"&chr(34)&">$1</a>")
    Set objRegExp = Nothing
    makelink = str
end function


Hvorefter jeg kalder den som eks.: <%=makelink(rs_db("contents"))%>
Avatar billede mortvader Nybegynder
29. december 2008 - 13:22 #7
prøv at kalde den sådan:

<%=makelink rs_db("contents")%>

(altså uden parantesen)
Avatar billede mrvedel Nybegynder
29. december 2008 - 13:32 #8
Det vil den desværre slet ikke...
Melder siden fejl... HTTP Error fejl... Jeg kan ikke se hvilken linje den melder fejl i...
Avatar billede mortvader Nybegynder
29. december 2008 - 13:38 #9
Nej okay, jeg har vist sovet lidt i timen.


Linien skal hedde:
str=replace(str,"%placeholder%",lnktxt)

..og ret dit kald tilbage til:
<%=makelink(rs_db("contents"))%>

Lad os se om det hjælper..
Avatar billede mrvedel Nybegynder
29. december 2008 - 13:46 #10
Jaaa!
Nu sker der sgu noget... Kan godt se hvad du havde lavet...

Dog: Nu viser den slet ikke de adresser der er under 20 tegn lange....???
:-)

Beklager sgu' at være problem mager her den 29....
Avatar billede mortvader Nybegynder
29. december 2008 - 14:03 #11
ja pyt med det :)

men er vi enige om at de 3 linier nu ser sådan ud:


lnktxt=left(objRegExp.Replace(str, "$2$3$4"),20)
str = objRegExp.Replace(str, "$1<a href="&chr(34)&"http://$2$3$4"&chr(34)&" target='_blank'>%placeholder%</a>")
str = replace(str,"%placeholder%",lnktxt)

..og at det virker som det skal - undtagen når linket er kortere end 20 tegn?
Avatar billede mrvedel Nybegynder
29. december 2008 - 15:04 #12
jeps....
Lige præcis...
Avatar billede mrvedel Nybegynder
29. december 2008 - 15:11 #13
Hov nej... Min fejl.
Hvis linket er over 20 tegn, skriver den hele adressen og lavet det til et link...
Men er det mindre, forsvinder hele linket...
Avatar billede mortvader Nybegynder
29. december 2008 - 15:34 #14
bob bob.. jeg tror jeg er nødt til at melde pas på den der... som sagt kender jeg ikke det der RegExp objekt.

Jeg gættede på at jeg kunne løse det. -jeg gættede tydeligvis forkert. Beklager!
Avatar billede mrvedel Nybegynder
11. januar 2009 - 14:48 #15
Ok... Det var sgu' ærgerligt...
Er det ikke andre der kan se en løsning på mit problem?
Avatar billede mortvader Nybegynder
11. januar 2009 - 23:15 #16
Man kan kode det selv, udenom det regexp objekt, hvis ikke man er for stolt til det :)
Avatar billede mrvedel Nybegynder
12. januar 2009 - 07:49 #17
Aha...
Det vil jeg meget gerne se... Jeg har blot "lånt" det der RegExp fra en jeg kender. Hvad har du af forslag?? :-)
Avatar billede mortvader Nybegynder
12. januar 2009 - 23:55 #18
1. find links i kildedokumentet "<a href" frem til "</a>"
2. indsæt en dummy f.eks "%link_1%" samtidig med du putter link-strengen over i en var.
3. analyser link-variablen. find det som står mellem "<a href...>" og "</a>"
4. forkort det og sæt tagsene på igen.
5. erstat dummy med det forkortede link.

det kræver lidt arbejde, men med lidt snilde skulle det kunne lade sig gøre. :)
Avatar billede mrvedel Nybegynder
13. januar 2009 - 08:02 #19
Ok...
Jeg gir sgu' 100 point hvis du kommer med en løsning... :-)
Avatar billede mortvader Nybegynder
13. januar 2009 - 08:15 #20
haha ja okay.. mail mig lige på e-mail(at)mortenlassen[dot]dk
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