Avatar billede frida Nybegynder
19. oktober 2005 - 18:00 Der er 8 kommentarer og
1 løsning

Link i tekstfeltet skal være klikbare link

Når der skrives link i tekstfeltet, skal outputtet være et klikbart link.

Jeg har fundet følgende løsninger, som er ret ens:

Function LinkString(strInput)
    Set objRegExpHTTP1 = New RegExp
    Set objRegExpHTTP2 = New RegExp   
    Set objRegExpEMail = New RegExp

    objRegExpHTTP1.Pattern = \"(http|ftp)(:\\/\\/[\\w\\._-]+\\.[\\w\\._-]+\\S*)\"
    objRegExpHTTP2.Pattern = \"(^|[^\\/])(www[^\\.\\s]?\\.[\\w\\._-]+\\.[A-Za-z]{2,3}\\S*)\"
    objRegExpEMail.Pattern = \"([\\w\\._-]+@[\\w\\._-]+\\.[A-Za-z]{2,3}\\S*)\"

    objRegExpHTTP1.Global = True
    objRegExpHTTP2.Global = True
    objRegExpEMail.Global = True

    objRegExpHTTP1.IgnoreCase = True
    objRegExpHTTP2.IgnoreCase = True
    objRegExpEMail.IgnoreCase = True

    strOutput = objRegExpEMail.Replace(strInput, \" <a href=\'mailto:$1\'>$1</a> \")
    strOutput = objRegExpHTTP1.Replace(strOutput, \" <a href=\'$1$2\' target=\'_blank\'>$1$2</a> \")
    strOutput = objRegExpHTTP2.Replace(strOutput, \" <a href=\'http://$2\' target=\'_blank\'>$2</a> \")
       
    Set objRegExpHTTP2 = Nothing
    set objRegExpHTTP1 = Nothing
    Set objRegExpEMail = Nothing

    LinkString = strOutput
End Function

............................................................

Function LinkString(strInput)
dim arrPattern, arrReplaceString, Rx, intIndex
  arrPattern = Array("([\w\._-]+@[\w\._-]+\.[A-Za-z]{2,4}\S*)", _
  "(http|https|ftp)(:\/\/[\w\._-]+\.[\w\._-]+\S*)", _
  "(^|[^\/])(www[^\.\s]?\.[\w\._-]+\.[A-Za-z]{2,4}\S*)")

  arrReplaceString = Array(" <a href='mailto:$1'>$1</a> ", _
  " <a href='$1$2' target='_blank'>$1$2</a> ", _
  " <a href='http://$2' target='_blank'>$2</a> ")

  Set Rx = New RegExp
  Rx.Global = True
  Rx.IgnoreCase = True

  For intIndex = 0 To UBound(arrPattern)
    Rx.Pattern = arrPattern(intIndex)
    strInput = Rx.Replace(strInput, arrReplaceString(intIndex))
  Next
  Set Rx = Nothing

  LinkString = strInput
End Function


Begge to virker fint lige bortset fra at de konsekvent ta'r det første ord i næste linie med.
Jeg kan simpelthen ikke gennemskue, hvad der er galt.

Kan nogen hjælpe.
Avatar billede goose Nybegynder
19. oktober 2005 - 18:15 #1
Jeg plejer at bruge nedenstående og har ikke haft problemer:

function makeLink(str)
    '*** Make the reqular expr object
    Set objRegExp = New RegExp
    objRegExp.IgnoreCase = True
    objRegExp.Global = True

    '***Make html links
    objRegExp.Pattern = "(\bhttp\:\/\/)?(\bw{3}\.\S+\.[a-z][a-z]+\b)(\/\S+\b)?(\?\S+\b)?"
    str = objRegExp.Replace(str, "<a href="&chr(34)&"http://$2$3$4"&chr(34)&" target='_blank'>$1$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

/Goose
Avatar billede frida Nybegynder
19. oktober 2005 - 18:32 #2
Det hjalp mærkbart - men problemet er ikke helt løst. Der er stadig eet sted, hvor den tager første ord i næste linie med. Det ser således ud:

......Anmelderen skriver her: <a href="http://www.domæne.dk/?/bog.asp?id=189459<br><br>En" target='_blank' class='t_felt'>http://www.domæne.dk/?/bog.asp?id=189459<br><br>En</a> spændingsroman ...........

Og hvorfor det sker forstår jeg ikke. Der må jo være en forskel på dette link og de øvrige links, som nu virker fint. Jeg kan bare ikke se forskellen.
Avatar billede goose Nybegynder
19. oktober 2005 - 18:36 #3
Jeg tror det er noget med et mellemrum der spiller ind. Hvis der ikke er et mellemrum så kan den ikke skille det ad.

Jeg bruger normalt også denne i forbindelse med overnstående:

tekst = makelink(rs("tekst"))
tekst = replace(tekst, vbCrLf, " <BR>")

- og på den måde tvinger jeg et mellemrum ind ved BR så scriptet kan se der er et mellemrum.

/Goose
Avatar billede frida Nybegynder
19. oktober 2005 - 18:39 #4
Jeg er inde på samme tanke - og har lige tjekket med og uden linieskift. Men det har fungeret fint. Jeg prøver lige at genskabe præcis den tekst, hvor problemet stadig er - og ser om det bliver ok. Jeg prøver også lige med en tvangs <br>
Avatar billede frida Nybegynder
19. oktober 2005 - 18:41 #5
Jeg har faktisk allerede en <br>:

<%
strReplace = Replace(rs("Fritekst"),vbcrlf,"<br>")
strReplace = HLSearchWords(strReplace,soeg)
strReplace = makeLink(strReplace)

Response.write strReplace %>

Så det er ikke der, problemet ligger
Avatar billede goose Nybegynder
19. oktober 2005 - 18:46 #6
Prøv og læg mærke til, at jeg har et mellemrum før <BR> i min replace :o)


/Goose
Avatar billede frida Nybegynder
19. oktober 2005 - 18:50 #7
Jamen det var da lige det der skulle til :o)
Jeg siger mange tak for hjælpen.

Du må lige give et svar - så du kan få dine fortjente point.
Fortsat god aften..
Avatar billede goose Nybegynder
19. oktober 2005 - 18:58 #8
jamen det gør jeg så og tak i lige måde :o)

/Goose
Avatar billede goose Nybegynder
19. oktober 2005 - 19:21 #9
- og tak for point

/Goose
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