Avatar billede sp Nybegynder
28. oktober 2001 - 14:14 Der er 27 kommentarer og
1 løsning

Hvad sker der i denne \"link\" -funktion

Jeg har problemer med denne funktion. Nogle steder laver den et dobbelt link. Altså et link i et andet link

<A HREF=\"http://<A HREF=\"http://www.minside.dk\" TARGET=\"_blank\">www.minside.dk</A>\" TARGET=\"_blank\"><A HREF=\"http://www.minside.dk\" TARGET=\"_blank\">www.minside.dk</A></A><br>

Andre steder virker det. Er der nogle der kan hjælpe mig med at rette det til så der ikke er problemer med det, og evt. fortælle lidt om hvordan det fungerer?

mvh
Søren Peter


<%
Function addStyle(sInput, sTarget)
    Dim sNew, sPunct, sVal1, sVal2, sVal3, sVal4,bStop
    \' Define punctuation characters
    sPunct = \"_-+=!?.,;:`~\'\"\"*^$%()[]{}<>|\"
   
    \' Assign input string to local variable so we don\'t change the
    \' original string.
    sNew = sInput

    \' Split the string by whitespace: spaces, carriage returns, line feeds,
    \' and tabs.  Then, for each \"word\" in the string...
    For Each sVal1 in Split(sNew, \" \")
    For Each sVal2 in Split(sVal1, vbcr)
    For Each sVal3 in Split(sVal2, vblf)
    For Each sVal4 in Split(sVal3, Chr(9))
        \' Remove beginning and ending punctuation
        bStop = FALSE
        Do While (Not bStop)
            If (Instr(sPunct, Left(sVal4, 1)) <> 0 And Len(sVal4) > 2) Then
                sVal4 = Mid(sVal4, 2)
            Else
                bStop = TRUE
            End If
        Loop
       
        bStop = FALSE
        Do While (Not bStop)
            If (Instr(sPunct, Right(sVal4, 1)) <> 0 And Len(sVal4) > 2) Then
                sVal4 = Left(sVal4, Len(sVal4) - 1)
            Else
                bStop = TRUE
            End If
        Loop

        \' If the word begins with http:// then convert all occurrences
        \' of this word to a hyperlink.
        If (LCase(Left(sVal4, 7) = \"http://\") Or LCase(Left(sVal4, 4) = \"www.\")) Then
            If (LCase(Left(sVal4, 4) = \"www.\")) Then
                If (sTarget = \"\") then
                    sNew = Replace(sNew, sVal4, \"<A HREF=\"\"http://\" & sVal4 & \"\"\">\" & sVal4 & \"</A>\")
                Else
                    sNew = Replace(sNew, sVal4, \"<A HREF=\"\"http://\" & sVal4 & \"\"\" TARGET=\"\"\" & sTarget & \"\"\">\" & sVal4 & \"</A>\")
                End If
            Else
                If (sTarget = \"\") then
                    sNew = Replace(sNew, sVal4, \"<A HREF=\"\"\" & sVal4 & \"\"\">\" & sVal4 & \"</A>\")
                Else
                    sNew = Replace(sNew, sVal4, \"<A HREF=\"\"\" & sVal4 & \"\"\" TARGET=\"\"\" & sTarget & \"\"\">\" & sVal4 & \"</A>\")
                End If
            End If
        End If
       
        \' If this word looks like an e-mail address then convert all
        \' occurrences into a mailto: link.
        If (Instr(sVal4, \"@\") >= 2 And Instr(sVal4, \".\") <> 0 And Len(sVal4) >= 5) Then
            sNew = Replace(sNew, sVal4, \"<A HREF=\"\"mailto:\" & sVal4 & \"\"\">\" & sVal4 & \"</A>\")
        End If
    Next
    Next
    Next
    Next
    \' Return converted string
    addStyle = sNew
End function

%>
Avatar billede sp Nybegynder
28. oktober 2001 - 14:15 #1
Eller nogle der har en funktion der virker bedre?
Avatar billede eagleeye Praktikant
28. oktober 2001 - 14:31 #2
jeg har en function som i en tekst streng laver www.eksperten.dk om til et link lige som her på eksperten. Den laver og email adresse til eamil adresser og htt://www.hej.dk til link:


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

Her en function som laver web og email adresse om til link.

Måske du kan benytter den ?? jeg ved ikke hvad din input streng indeholder?
Avatar billede sp Nybegynder
28. oktober 2001 - 14:45 #3
Hvis jeg i en sætning skriver

Besøg denne adresse www.miniside.dk.

Så tager den punktummet med så browseren slår op på \"www.minside.dk.\" og ikke \"www.minside.dk\", hvordan kan jeg få den til at stoppe ved punktummer?
Avatar billede sp Nybegynder
28. oktober 2001 - 14:48 #4
Ellers virker den ihvertfald bedre end den gamle:)
Avatar billede eagleeye Praktikant
28. oktober 2001 - 15:17 #5
jeg vil prøve at kikke på det.
Avatar billede sp Nybegynder
28. oktober 2001 - 15:22 #6
Kan man evt. gøre det med en replace??
Avatar billede sp Nybegynder
28. oktober 2001 - 21:03 #7
OK. Hvis du finder ud af at gøre scriptet endnu mere perfekt, så får du pointene!

:)
Avatar billede eagleeye Praktikant
02. november 2001 - 16:30 #8
fik vi det løst???
Avatar billede eagleeye Praktikant
02. november 2001 - 16:31 #9
jeg mener vi fik det jo løst i et andet spm.
Avatar billede sp Nybegynder
02. november 2001 - 16:50 #10
Der er et problem:

Link i parenteser

(www.minside.dk) bliver omsat til som link: www.minside.dk)/

Og \"(\" bliver fjernet helt...
Avatar billede eagleeye Praktikant
02. november 2001 - 16:52 #11
ok det lyder ikke godt.... det kikker jeg lige på.
Avatar billede eagleeye Praktikant
02. november 2001 - 16:58 #12
Prøv denne:

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}[\\w\\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, \" $1<a href=\'http://$2\' target=\'_blank\'>$2</a> \")
objRegExpHTTP2.Pattern = \"([.)\\]\\}])(\' target=)\"
strOutput = objRegExpHTTP2.Replace(strOutput, \"$2\")
objRegExpHTTP2.Pattern = \"([.)\\]\\}])(</a>)\"
strOutput = objRegExpHTTP2.Replace(strOutput, \"$2$1\")

Set objRegExpHTTP2 = Nothing
set objRegExpHTTP1 = Nothing
Set objRegExpEMail = Nothing

LinkString = strOutput
End Function
Avatar billede sp Nybegynder
02. november 2001 - 17:29 #13
Den virker.
jeg lukker spm.

Tak for det:)
Avatar billede sp Nybegynder
05. november 2001 - 23:15 #14
Hejsa. Du hjalp mig med punktummer efter et link. Det samme problem har jeg med kommaer!

mvh
Søren Peter
Avatar billede eagleeye Praktikant
05. november 2001 - 23:24 #15
den kommer her:

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}[\\w\\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, \" $1<a href=\'http://$2\' target=\'_blank\'>$2</a> \")
objRegExpHTTP2.Pattern = \"([.)\\]\\}])(\' target=)\"
objRegExpHTTP2.Pattern = \"([,.)\\]\\}])(\' target=)\"
strOutput = objRegExpHTTP2.Replace(strOutput, \"$2\")
objRegExpHTTP2.Pattern = \"([,.)\\]\\}])(</a>)\"
strOutput = objRegExpHTTP2.Replace(strOutput, \"$2$1\")

Set objRegExpHTTP2 = Nothing
set objRegExpHTTP1 = Nothing
Set objRegExpEMail = Nothing

LinkString = strOutput
End Function
Avatar billede sp Nybegynder
05. november 2001 - 23:43 #16
Mange tak:)
Avatar billede sp Nybegynder
06. november 2001 - 15:48 #17
Nåh nu er der stadig et problem.

Hvis jeg skifter linje efter et link, tager den linjeskiftet med i linket. Hvis jeg husker at lave et mellemrum imellem linket og <br> så tager den det ikke med i linket.
Avatar billede sp Nybegynder
06. november 2001 - 15:51 #18
Hvis den stopper ved et vbCrlf eller et <br>, eller en af delene.
Jeg har en replace der udskifter vbCrlf med <br>,og jeg har prøvet at kalde funktionen inden, men den tager stadig <br> med i linket

Eks:
www.minside.dk<br>

mvh
Søren Peter
Avatar billede eagleeye Praktikant
06. november 2001 - 17:31 #19
hvis man konvertet \"<br>\" til vbCrLf inden kaldet til LinkString mener jeg det skulle vikre... men nu skulle den fjerne <br> fra link.

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}[\\w\\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, \" $1<a href=\'http://$2\' target=\'_blank\'>$2</a> \")
objRegExpHTTP2.Pattern = \"(<br>|[,.)\\]\\}])(\' target=)\"
strOutput = objRegExpHTTP2.Replace(strOutput, \"$2\")
objRegExpHTTP2.Pattern = \"(<br>|[,.)\\]\\}])(</a>)\"
strOutput = objRegExpHTTP2.Replace(strOutput, \"$2$1\")

Set objRegExpHTTP2 = Nothing
set objRegExpHTTP1 = Nothing
Set objRegExpEMail = Nothing

LinkString = strOutput
End Function
Avatar billede sp Nybegynder
06. november 2001 - 21:54 #20
Prøv at se, hvad jeg har gjort.
Det ser da ud til at den koverterer det ikke?
Men det virker ikke.


    Content= REPLACE(rs(\"Content\"),vbCrlf,\"<br>\" & vbCrlf)
  Content = REPLACE(Content,\"[\",\"<b>\")
  Content = REPLACE(Content,\"]\",\"</b>\") 
  Content = REPLACE(Content,\"{\",\"<i>\")
  Content = REPLACE(Content,\"}\",\"</i>\") 
    Content = LinkString(Content)
Avatar billede sp Nybegynder
10. november 2001 - 18:13 #21
Hej igen.

Jeg har samme problem med emailadresser...
Avatar billede sp Nybegynder
11. november 2001 - 13:49 #22
Halloo??? Kan du hjælpe mig med email-adresser?
Avatar billede eagleeye Praktikant
11. november 2001 - 14:42 #23
fjerne den ikke . og enter?
Avatar billede eagleeye Praktikant
11. november 2001 - 14:45 #24
Glem hvad jeg lige skrev.... typsik man spørger og så ser man to sekunder efter hvor problemmet er....


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}[\\w\\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, \" $1<a href=\'http://$2\' target=\'_blank\'>$2</a> \")

objRegExpHTTP2.Pattern = \"(<br>|[,.)\\]\\}])(\'>)\"
strOutput = objRegExpHTTP2.Replace(strOutput, \"$2\")
objRegExpHTTP2.Pattern = \"(<br>|[,.)\\]\\}])(\' target=)\"
strOutput = objRegExpHTTP2.Replace(strOutput, \"$2\")
objRegExpHTTP2.Pattern = \"(<br>|[,.)\\]\\}])(</a>)\"
strOutput = objRegExpHTTP2.Replace(strOutput, \"$2$1\")

Set objRegExpHTTP2 = Nothing
set objRegExpHTTP1 = Nothing
Set objRegExpEMail = Nothing

LinkString = strOutput
End Function
Avatar billede sp Nybegynder
11. november 2001 - 14:46 #25
Hvad.... Der er samme problem med email-adresser. Den indsætter <br> i den, som den gjorde med URL...
Avatar billede sp Nybegynder
11. november 2001 - 14:54 #26
Tak det ser ud til at virke
Avatar billede eagleeye Praktikant
11. november 2001 - 14:56 #27
Jeg har prøve de replace functioner du har lavet det undre mig at de ikke virker jeg har prøvet dette som vikrer fint, Det bliver sat <b>/<i> på de rigtige steder. Jeg har godt nok byttet lidt rundt på række følgen for ikke <b>/<i> kommer med i linket.


    strTxt = \"Denne www.hej.dk<br> text www.hej.dk/side.html indehodler www.hej.dk links skulle (www.hej.dk) ikke www.hej.dk, [www.hej.dk] være {www.hej.dk} link. Lidt mere er med. Mere test et@test.dk. En test www.hej.dk. Og http://www.hej.dk.\"
 
Content= REPLACE(strTxt,vbCrlf,\"<br>\" & vbCrlf)
Content = LinkString(Content)
Content = REPLACE(Content,\"[\",\"<b>\")
Content = REPLACE(Content,\"]\",\"</b>\")
Content = REPLACE(Content,\"{\",\"<i>\")
Content = REPLACE(Content,\"}\",\"</i>\")
Avatar billede sp Nybegynder
11. november 2001 - 15:08 #28
Det virker også fint nu efter den fjerner <br>
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