Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Stackens storlek

Postades av 2004-06-16 22:04:05 - Patrik Wårdmark, i forum asp - allmänt, Tråden har 41 Kommentarer och lästs av 626 personer

Jag har en funktion med rekursivt anrop där den behöver köras väldigt många gånger innan allt "faller ut". Problemet är att vid vissa scenarion räcker inte stacken till.
Kan man ändra storleken på stacken?


Svara

Sv: Stackens storlek

Postades av 2004-06-16 22:06:49 - Andreas Hillqvist

Måste det vara rekursivt? I vissa fall går det att lösa på andra sätt.


Svara

Sv: Stackens storlek

Postades av 2004-06-17 20:39:36 - Patrik Wårdmark

Det är en funktion som konverterar adresser i löptext till klickbara länkar. När en länk påträffats, anropar funktionen sig själv med resterande del av texten tills ingen mer påträffas.
En text som är en slags länksamling med över ca 100 länkar visar sig nu bli för mycket för stacken...


Svara

Sv: Stackens storlek

Postades av 2004-06-17 20:44:10 - Andreas Hillqvist

Detta låter mycket ineffektivt. Skicka upp koden hit kan jag hjälpa dig skriva om den.


Svara

Sv: Stackens storlek

Postades av 2004-06-17 21:55:07 - Thomas Vanhaniemi

Använd Regular Expressions istället, går fortare och du behöver inte anropa flera funktioner...

Vill du kan jag skriva ett mönster, eller gör en sökning på Google så hittar du nog en del exempel.

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-17 22:20:04 - Thomas Vanhaniemi

Följande borde träffa på alla länkar som börjar på "http://", "https://" och "www.".
Fler går att lägga till...

<code>
Private Function ActivateLinks(Text)
Dim RegExp
Dim Res
Set RegExp = New RegExp

RegExp.Pattern = "((?:https?://|www\.)[^\s]+)"
RegExp.Global = True
RegExp.IgnoreCase = True

Res = RegExp.Replace(Text, "$1")
Set RegExp = Nothing
ActivateLinks = Res
End Function
</code>

Borde fungera, har däremot inte testat den eftersom jag inte använder vanlig ASP nåmer; har gått över till ASP.NET...

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-17 22:40:57 - Göran Andersson

Det är fel sätt att använda rekursiva funktioner, helt enkelt.

När du anropar funktionen så skickar du med en kopia av texten, det innebär ju att det finns hundra strängar i minnet innan sista anropet sker. Meddellängden på strängarna är hälften av hela originalsträngen, så anropen kräver alltså minne för längden av strängen * 0,5 * 100, och strängen lär väl vara ganska lång om den innehåller 100 länkar.

Om varje länk är 50 tecken så blir det 50 * 100 * 0,5 * 100 = 250.000 byte.

Inte konstigt att du får problem...


Svara

Sv: Stackens storlek

Postades av 2004-06-18 03:00:52 - Patrik Wårdmark

Okej, prövade din kod.
Är själv inte så bra på RegExp hantering, så skulle du även kunna hjälpa mig så även följande då blir löst :)

Om din funktion stöter på en länk inne i strängen som redan är html-kodad till att vara klickbar så uppstår problem och sidan skrivs ut fel.

Utöver detta skulle jag även vilja att epost-adresser i texten blir klickbara samt samma hänsyn här till att om den redan är html-kodad till att vara klickbar behöver inget göras. T.ex. kanske en persons namn redan är html-kodad till att vara dennes klickbara epostadress.

Stort tack på förhand! :-)


Svara

Sv: Stackens storlek

Postades av 2004-06-18 09:46:29 - Thomas Vanhaniemi

Testa följande, borde träffa på enbart de länkar och emailadresser som inte har fixats till än...
Säg till om du stöter på patrull!

<code>
Private Function ActivateLinks(Text)
Dim RegExp
Dim Res
Set RegExp = New RegExp

RegExp.Global = True
RegExp.IgnoreCase = True

'Ersätt länkar
RegExp.Pattern = "((?<!<a[\w\W]+?href="")(?:https?://|www\.)[^\s]+)"
Res = RegExp.Replace(Text, "$1")

'Ersätt e-post adresser
RegExp.Pattern = "((?<!<a[\w\W]+?href=""mailto:)[^\s]+@[^\s]+)"
Res = RegExp.Replace(Res, "$1")

Set RegExp = Nothing
ActivateLinks = Res
End Function
</code>

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-18 14:28:00 - Thomas Vanhaniemi

Hej igen!

Koden jag postade här före fungerar inte eftersom RegExp i VBScript inte har stöd för något som heter Lookbehind.
Här kommer en kod som jag har testat och den fungerar bra på det jag har testat...

<code>
Private Function ActivateLinks(Text)
Dim RegExp
Set RegExp = New RegExp

RegExp.Global = True
RegExp.IgnoreCase = True

'Radera redan länkade länkar
RegExp.Pattern = "<a[\w\W]+?href=""(?:mailto:)?([\w\W]+?)""[\w\W]*?>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, " $1 |$2|")

'Fixa till www. länkar
RegExp.Pattern = "(^|\s)(www\.[^\s]+)"
Text = RegExp.Replace(Text, "$1http://$2")

'Ersätt länkar
RegExp.Pattern = "(^|\s)(https?://[^\s]+)"
Text = RegExp.Replace(Text, "$1$2")

'Ersätt e-post adresser
RegExp.Pattern = "(^|\s)([^\s""]+@[^\s]+)"
Text = RegExp.Replace(Text, "$1$2")

'Fixa till eventuella namn på länkar
RegExp.Pattern = "\1\s\|(.+?)\|"
Text = RegExp.Replace(Text, "$2")

Set RegExp = Nothing
ActivateLinks = Text
End Function
</code>

Den använder också Regular Expressions men det blir lite längre hantering eftersom Lookbehind inte stödjs...

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-18 15:10:04 - Patrik Wårdmark

Okej, prövade men den klarar inte riktigt allt jag önskar :)

Testa att köra igenom denna textmassa i funktionen så ser du vad jag önskar den behöver kunna:
<code>texten= "olänkad epost: enepost@epost.com<br>"
texten= texten & "redan länkad epost: enepost@epost.com<br>"
texten= texten & "redan länkad epost 2: Sune Post<br>"
texten= texten & "olänkad weblänk: www.en-url.com<br>"
texten= texten & "redan länkad weblänk: www.en-url.com<br>"
texten= texten & "redan länkad weblänk 2: En hemsida<br>"

response.write "<p><b>Obehandlad text:</b><br>" & texten
response.write "<p><b>Bearbetad text:</b><br>" & ActivateLinks (texten)
</code>
Hoppas jag inte upplevs som för besvärlig nu bara :)


Svara

Sv: Stackens storlek

Postades av 2004-06-18 15:12:54 - Thomas Vanhaniemi

Hej!

Hittade ett litet fel, men här kommer koden som ordnar upp det också...

<code>
Private Function ActivateLinks(Text)
Dim RegExp
Set RegExp = New RegExp

RegExp.Global = True
RegExp.IgnoreCase = True

'Radera redan länkade länkar
RegExp.Pattern = "<a[\w\W]+?href=""(?:mailto:)?([\w\W]+?)""[\w\W]*?>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, " $1 |$2|")

'Fixa till www. länkar
RegExp.Pattern = "(^|\s)(www\.[^\s]+)"
Text = RegExp.Replace(Text, "$1http://$2")

'Ersätt länkar
RegExp.Pattern = "(^|\s)(https?://[^\s]+)"
Text = RegExp.Replace(Text, "$1$2")

'Ersätt e-post adresser
RegExp.Pattern = "(^|\s)([^\s""]+@[^\s]+)"
Text = RegExp.Replace(Text, "$1$2")

'Fixa till eventuella namn på länkar
RegExp.Pattern = "\2\s\|(.+?)\|"
Text = RegExp.Replace(Text, "$3")

Set RegExp = Nothing
ActivateLinks = Text
End Function
</code>

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-18 15:31:16 - Patrik Wårdmark

Se min ovanstående postning :)


Svara

Sv: Stackens storlek

Postades av 2004-06-18 15:34:02 - Thomas Vanhaniemi

Ok, ska ta en snabb fix, återkommer!

Och nejdå, du är inte jobbig på något sätt!
Bra att veta hur din text kan se ut nu, missade lite i tankegångarna tidigare ;)

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-18 15:46:57 - Thomas Vanhaniemi

Sådär, nu träffar den på allt du skickade åt mig...
Återstår bara att se hur bra funktionen fungerar ihop med all text ;)

<code>
Private Function ActivateLinks(Text)
Dim RegExp
Set RegExp = New RegExp

RegExp.Global = True
RegExp.IgnoreCase = True

'Radera redan länkade länkar
RegExp.Pattern = "<a[\w\W]+?href=""(?:mailto:)?([\w\W]+?)""[\w\W]*?>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, " $1 |$2|")

'Fixa till www. länkar
RegExp.Pattern = "(^|\s|>)(www\.[^\s]+)"
Text = RegExp.Replace(Text, "$1http://$2")

'Ersätt länkar
RegExp.Pattern = "(^|\s|>)(https?://[^\s<]+)"
Text = RegExp.Replace(Text, "$1$2")

'Ersätt e-post adresser
RegExp.Pattern = "(^|\s|>)([^\s""\|]+@[^\s<\|]+)"
Text = RegExp.Replace(Text, "$1$2")

'Fixa till eventuella namn på länkar
RegExp.Pattern = "\2\s\|(.+?)\|"
Text = RegExp.Replace(Text, "$3")

Set RegExp = Nothing
ActivateLinks = Text
End Function
</code>

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-18 15:57:11 - Thomas Vanhaniemi

Korrigering...

<code>
Private Function ActivateLinks(Text)
Dim RegExp
Set RegExp = New RegExp

RegExp.Global = True
RegExp.IgnoreCase = True

'Radera redan länkade länkar
RegExp.Pattern = "<a[\w\W]+?href=""(?:mailto:)?([\w\W]+?)""[\w\W]*?>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, " $1 |$2|")

'Fixa till www. länkar
RegExp.Pattern = "(^|\s|>)(www\.[^\s<]+)"
Text = RegExp.Replace(Text, "$1http://$2")

'Ersätt länkar
RegExp.Pattern = "(^|\s|>)(https?://[^\s<]+)"
Text = RegExp.Replace(Text, "$1$2")

'Ersätt e-post adresser
RegExp.Pattern = "(^|\s|>)([^\s""\|>]+@[^\s<\|]+)"
Text = RegExp.Replace(Text, "$1$2")

'Fixa till eventuella namn på länkar
RegExp.Pattern = "\2\s\|(.+?)\|"
Text = RegExp.Replace(Text, "$3")

Set RegExp = Nothing
ActivateLinks = Text
End Function
</code>

Såg till att om det står till exempel <något>www.link.com</något> så fungerar funktionen...
Borde nog vara sista korrigeringen skulle jag tro, men säg till om du hittar mer =)

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-18 16:36:50 - Patrik Wårdmark

Suveränt! :-)

En liten sak till. Ibland kan även lokala länkar i stil med dessa två finnas i textmassan:

En lokal länk
En lokal länk

Går det fixa så även de ignoreras?


Svara

Sv: Stackens storlek

Postades av 2004-06-18 16:46:52 - Thomas Vanhaniemi

Ska se, vänta ett ögonblick ;)


Svara

Sv: Stackens storlek

Postades av 2004-06-18 16:55:23 - Thomas Vanhaniemi

Ok, nu borde det fungera =)
Har jag sagt många gånger ;)

<code>
Private Function ActivateLinks(Text)
Dim RegExp
Set RegExp = New RegExp

RegExp.Global = True
RegExp.IgnoreCase = True

'Radera redan länkade externa länkar
RegExp.Pattern = "<a[\w\W]+?href=""(?:mailto:|https?://)([\w\W]+?)""[\w\W]*?>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, " $1 |$2|")

'Fixa till www. länkar
RegExp.Pattern = "(^|\s|>)(www\.[^\s<]+)"
Text = RegExp.Replace(Text, "$1http://$2")

'Ersätt länkar
RegExp.Pattern = "(^|\s|>)(https?://[^\s<]+)"
Text = RegExp.Replace(Text, "$1$2")

'Ersätt e-post adresser
RegExp.Pattern = "(^|\s|>)([^\s""\|>]+@[^\s<\|]+)"
Text = RegExp.Replace(Text, "$1$2")

'Fixa till eventuella namn på länkar
RegExp.Pattern = "\2\s\|(.+?)\|"
Text = RegExp.Replace(Text, "$3")

Set RegExp = Nothing
ActivateLinks = Text
End Function
</code>

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-18 16:57:58 - Thomas Vanhaniemi

Tror mig ha hittat ett litet fel igen, ska se hur jag fixar det...


Svara

Sv: Stackens storlek

Postades av 2004-06-18 17:03:42 - Patrik Wårdmark

Okej :)

Dina lösningar har fungerat hela tiden, det är jag som ständigt kommer på mer och mer problem för dig hela tiden ;)


Svara

Sv: Stackens storlek

Postades av 2004-06-18 17:22:46 - Thomas Vanhaniemi

Sådär, nu ska det nog vara ordnat =)
Hittade nämligen en kombination som skulle skita sig totalt, nämligen om det stod eller liknande...
Däremot är det en liten sak, kan dina färdiga länkar se ut liknande det här: <a target="något" href="något">?
Det är nämligen så att mönstret nu förutsätter att de färdiga länkarna ser ut såhär:
Ska göra en lösning för det också, men testa om följande kod fungerar...


Private Function ActivateLinks(Text)
Dim RegExp
Set RegExp = New RegExp

RegExp.Global = True
RegExp.IgnoreCase = True

'Radera redan länkad e-post
RegExp.Pattern = "([\w\W]*?)
"
Text = RegExp.Replace(Text, " $1 |$2|")

'Radera redan länkade externa länkar
RegExp.Pattern = "<a\shref=""(https?://[\w\W]+?)""[\w\W]*?>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, " $1 |$2|")

'Fixa till www. länkar
RegExp.Pattern = "(^|\s|>)(www\.[^\s<]+)"
Text = RegExp.Replace(Text, "$1http://$2")

'Ersätt länkar
RegExp.Pattern = "(^|\s|>)(https?://[^\s<]+)"
Text = RegExp.Replace(Text, "$1$2")

'Ersätt e-post adresser
RegExp.Pattern = "(^|\s|>)([^\s""\|>]+@[^\s<\|]+)"
Text = RegExp.Replace(Text, "$1$2")

'Fixa till eventuella namn på länkar
RegExp.Pattern = "\2\s\|(.+?)\|"
Text = RegExp.Replace(Text, "$3")

Set RegExp = Nothing
ActivateLinks = Text
End Function
</code>

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-18 17:32:36 - Thomas Vanhaniemi

Problem är till för att lösas ;)

En sak till, vill du att saker som "target="_blank" etc också ska komma med?
I så fall får jag skriva om koden lite till =)

Här har jag i alla fall ordnat föregående kod lite, nu klarar den även av om det står något annat element före href...

<code>
Private Function ActivateLinks(Text)
Dim RegExp
Set RegExp = New RegExp

RegExp.Global = True
RegExp.IgnoreCase = True

'Fixa till de färdiga länkarna
RegExp.Pattern = "<a\s([\w\W]*?)href=""([\w\W]+?)""([\w\W]*?)>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, "$4")

'Radera redan länkad e-post
RegExp.Pattern = "<a\shref=""mailto:([\w\W]+?)""[\w\W]*?>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, " $1 |$2|")

'Radera redan länkade externa länkar
RegExp.Pattern = "<a\shref=""(https?://[\w\W]+?)""[\w\W]*?>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, " $1 |$2|")

'Fixa till www. länkar
RegExp.Pattern = "(^|\s|>)(www\.[^\s<]+)"
Text = RegExp.Replace(Text, "$1http://$2")

'Ersätt länkar
RegExp.Pattern = "(^|\s|>)(https?://[^\s<]+)"
Text = RegExp.Replace(Text, "$1$2")

'Ersätt e-post adresser
RegExp.Pattern = "(^|\s|>)([^\s""\|>]+@[^\s<\|]+)"
Text = RegExp.Replace(Text, "$1$2")

'Fixa till eventuella namn på länkar
RegExp.Pattern = "\2\s\|(.+?)\|"
Text = RegExp.Replace(Text, "$3")

Set RegExp = Nothing
ActivateLinks = Text
End Function
</code>

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-18 18:46:54 - Patrik Wårdmark

Gällande target vore det fint om externa länkar kan styras till att bli _blank medan interna länkar som default använder sidstandarden och inte har nån angiven target. Om en länk däremot manuellt redigerats till att bryta det mönstret och har en annan target vore det trevligt om den ändå får förbli oförändrad.

En liten skönhetsdetalj också :)
Om en länk heter www.en-url.com så vore det snyggare om inte http:// skrivs ut i själva den klickbara texten.

Slutligen, släng gärna in kommentarer om att det är du som gjort funktionen i källkoden. Det känns bara rätt om credit går till dig.


Svara

Sv: Stackens storlek

Postades av 2004-06-18 18:50:16 - Thomas Vanhaniemi

Jag ska ordna dina önskemål =)
Ska slänga in någon kommentar att det är jag som gjort funktionen.
Ska också fixa den där skönhetsdetaljen ;)

Postar hit sen när den är klar...

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-18 20:16:09 - Thomas Vanhaniemi

Hej!

Nu tror jag att jag är klar med funktionen...
Försökte även fixa eventuella problem som skulle kunna uppstå beroende på vad de färdiga länkarna har för namn...
Fixade skönhetssaken och lade till kommentarer samt att man kan ställa in egenskaper för länkarna...
Om ingen target existerar och det är en extern länk ska den öppnas i ett nytt fönster...

<code>
Private Function ActivateLinks(Text)
'Funktionen skapad av Thomas Vanhaniemi (thomas@eurocitynet.nu)
'Skapad 18/6 2004
'All användning tillåten

Dim RegExp
Dim Spacer
Dim SpacerPattern
Set RegExp = New RegExp

Spacer = "-%|%-"
SpacerPattern = TextToPattern(Spacer)

RegExp.Global = True
RegExp.IgnoreCase = True

'Möblera om de färdiga länkarna
RegExp.Pattern = "<a([\w\W]*?)\s+href=""([\w\W]+?)""([\w\W]*?)\s*>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, "$4")

'Radera redan länkad e-post
RegExp.Pattern = "<a\shref=""mailto:([\w\W]+?)""([\w\W]*?)\s*>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, " $1 " & Spacer & "$2" & Spacer & "$3" & Spacer)

'Radera redan länkade externa länkar
RegExp.Pattern = "<a\shref=""(https?://[\w\W]+?)""([\w\W]*?)>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, " $1 " & Spacer & "$2" & Spacer & "$3" & Spacer)

'Ersätt länkar
RegExp.Pattern = "(^|\s|>)(https?://[^\s<]+)"
Text = RegExp.Replace(Text, "$1$2")

'Ersätt www länkar
RegExp.Pattern = "(^|\s|>)(www\.[^\s<]+)"
Text = RegExp.Replace(Text, "$1$2")

'Ersätt e-post adresser
RegExp.Pattern = "(^|\s|>)([^\s""\|>]+@[^\s<\|]+)"
Text = RegExp.Replace(Text, "$1$2")

'Fixa till eventuella namn på länkar med target angett
RegExp.Pattern = "\2\s" & SpacerPattern & "(.{0,50}target="".*?"".{0,50})" & SpacerPattern & "(.{0,50})" & SpacerPattern
Text = RegExp.Replace(Text, "$4")

'Fixa till eventuella namn på länkar utan target angett
RegExp.Pattern = "\2\s" & SpacerPattern & "(.{0,50})" & SpacerPattern & "(.{0,50})" & SpacerPattern
Text = RegExp.Replace(Text, "$4")

Set RegExp = Nothing
ActivateLinks = Text
End Function

Function TextToPattern(Text)
'Funktionen skapad av Thomas Vanhaniemi (thomas@eurocitynet.nu)
'Skapad 18/6 2004
'All användning tillåten

Dim RegExp
Dim Res
Set RegExp = New RegExp

RegExp.Global = True
RegExp.IgnoreCase = True

RegExp.Pattern = "([\.\+\?\*\[\{\^\$\|\(\)\\])"
Res = RegExp.Replace(Text, "\$1")

Set RegExp = Nothing
TextToPattern = Res
End Function
</code>

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-19 00:07:38 - Patrik Wårdmark

Enormt tack för hjälpen!

Kan jag maila dig om nån situation skulle uppstå som funktionen ej klarar? :)


Svara

Sv: Stackens storlek

Postades av 2004-06-19 00:10:34 - Thomas Vanhaniemi

Varsågod, det var en intressant utmaning bara =)
Det är bara att maila mig om något är fel =)

God fortsättning!

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-19 03:00:31 - Patrik Wårdmark

Stötte på en länk som ger fel...

Denna kod:
ÖLFA - Östergötlands Arkivförbund

Ger denna utdata på skärmen:
http://www.olfa.nu -%|%--%|%-ÖLFA - Östergötlands Arkivförbund-%|%-

Edit:
Såg själv felet nu... ett mellanslag smög sig in efter .nu :)

Kan du kanske även filtrera bort felaktiga mellanslag som hamnat inom href? :)


Svara

Sv: Stackens storlek

Postades av 2004-06-19 09:24:31 - Thomas Vanhaniemi

Testa följande...
Fixade problemet med mellanslag...

<code>
Private Function ActivateLinks(Text)
'Funktionen skapad av Thomas Vanhaniemi (thomas@eurocitynet.nu)
'Skapad 18/6 2004
'All användning tillåten

Dim RegExp
Dim Spacer
Dim SpacerPattern
Set RegExp = New RegExp

Spacer = "-%|%-"
SpacerPattern = TextToPattern(Spacer)

RegExp.Global = True
RegExp.IgnoreCase = True

'Möblera om de färdiga länkarna
RegExp.Pattern = "<a([\w\W]*?)\s+href=""\s*([^\s""]+)\s*""([\w\W]*?)\s*>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, "$4")

'Radera redan länkad e-post
RegExp.Pattern = "<a\shref=""mailto:([\w\W]+?)""([\w\W]*?)\s*>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, " $1 " & Spacer & "$2" & Spacer & "$3" & Spacer)

'Radera redan länkade externa länkar
RegExp.Pattern = "<a\shref=""(https?://[\w\W]+?)""([\w\W]*?)>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, " $1 " & Spacer & "$2" & Spacer & "$3" & Spacer)

'Ersätt länkar
RegExp.Pattern = "(^|\s|>)(https?://[^\s<]+)"
Text = RegExp.Replace(Text, "$1$2")

'Ersätt www länkar
RegExp.Pattern = "(^|\s|>)(www\.[^\s<]+)"
Text = RegExp.Replace(Text, "$1$2")

'Ersätt e-post adresser
RegExp.Pattern = "(^|\s|>)([^\s""\|>]+@[^\s<\|]+)"
Text = RegExp.Replace(Text, "$1$2")

'Fixa till eventuella namn på länkar med target angett
RegExp.Pattern = "\2\s" & SpacerPattern & "(.{0,50}target="".*?"".{0,50})" & SpacerPattern & "(.{0,50})" & SpacerPattern
Text = RegExp.Replace(Text, "$4")

'Fixa till eventuella namn på länkar utan target angett
RegExp.Pattern = "\2\s" & SpacerPattern & "(.{0,50})" & SpacerPattern & "(.{0,50})" & SpacerPattern
Text = RegExp.Replace(Text, "$4")

Set RegExp = Nothing
ActivateLinks = Text
End Function

Function TextToPattern(Text)
'Funktionen skapad av Thomas Vanhaniemi (thomas@eurocitynet.nu)
'Skapad 18/6 2004
'All användning tillåten

Dim RegExp
Dim Res
Set RegExp = New RegExp

RegExp.Global = True
RegExp.IgnoreCase = True

RegExp.Pattern = "([\.\+\?\*\[\{\^\$\|\(\)\\])"
Res = RegExp.Replace(Text, "\$1")

Set RegExp = Nothing
TextToPattern = Res
End Function
</code>

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-19 14:46:44 - Patrik Wårdmark

Finemang!

Just idag har jag inget behov av det, men om du bara för skojs skull känner för det att utöka funktionen, lägg gärna till att den även klarar ftp-adresser (default _blank även på dem).

:)


Svara

Sv: Stackens storlek

Postades av 2004-06-20 14:48:03 - Thomas Vanhaniemi

No problemos, här kommer koden för att stödja ftp adresser också!

<code>
Private Function ActivateLinks(Text)
'Funktionen skapad av Thomas Vanhaniemi (thomas@eurocitynet.nu)
'Skapad 18/6 2004
'All användning tillåten

Dim RegExp
Dim Spacer
Dim SpacerPattern
Set RegExp = New RegExp

Spacer = "-%|%-"
SpacerPattern = TextToPattern(Spacer)

RegExp.Global = True
RegExp.IgnoreCase = True

'Möblera om de färdiga länkarna
RegExp.Pattern = "<a([\w\W]*?)\s+href=""\s*([^\s""]+)\s*""([\w\W]*?)\s*>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, "$4")

'Radera redan länkad e-post
RegExp.Pattern = "<a\shref=""mailto:([\w\W]+?)""([\w\W]*?)\s*>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, " $1 " & Spacer & "$2" & Spacer & "$3" & Spacer)

'Radera redan länkade externa länkar
RegExp.Pattern = "<a\shref=""((?:https?://|ftps?://)[\w\W]+?)""([\w\W]*?)>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, " $1 " & Spacer & "$2" & Spacer & "$3" & Spacer)

'Ersätt länkar
RegExp.Pattern = "(^|\s|>)((?:https?://|ftps?://)[^\s<]+)"
Text = RegExp.Replace(Text, "$1$2")

'Ersätt www länkar
RegExp.Pattern = "(^|\s|>)(www\.[^\s<]+)"
Text = RegExp.Replace(Text, "$1$2")

'Ersätt e-post adresser
RegExp.Pattern = "(^|\s|>)([^\s""\|>]+@[^\s<\|]+)"
Text = RegExp.Replace(Text, "$1$2")

'Fixa till eventuella namn på länkar med target angett
RegExp.Pattern = "\2\s" & SpacerPattern & "(.{0,50}target="".*?"".{0,50})" & SpacerPattern & "(.{0,50})" & SpacerPattern
Text = RegExp.Replace(Text, "$4")

'Fixa till eventuella namn på länkar utan target angett
RegExp.Pattern = "\2\s" & SpacerPattern & "(.{0,50})" & SpacerPattern & "(.{0,50})" & SpacerPattern
Text = RegExp.Replace(Text, "$4")

Set RegExp = Nothing
ActivateLinks = Text
End Function

Function TextToPattern(Text)
'Funktionen skapad av Thomas Vanhaniemi (thomas@eurocitynet.nu)
'Skapad 18/6 2004
'All användning tillåten

Dim RegExp
Dim Res
Set RegExp = New RegExp

RegExp.Global = True
RegExp.IgnoreCase = True

RegExp.Pattern = "([\.\+\?\*\[\{\^\$\|\(\)\\])"
Res = RegExp.Replace(Text, "\$1")

Set RegExp = Nothing
TextToPattern = Res
End Function
</code>

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-20 16:34:42 - Patrik Wårdmark

En småsak kanske, men den tar t.ex. ftp://ftp.en-url.com men inte när det enbart står ftp.en-url.com
:)


Svara

Sv: Stackens storlek

Postades av 2004-06-20 16:55:23 - Patrik Wårdmark

En sak till.
Har en länk skrivits med blanksteg får den problem:
www.en-url.com/en mapp/index.html


Svara

Sv: Stackens storlek

Postades av 2004-06-20 17:07:34 - Thomas Vanhaniemi

Är ftp.en-url.com en giltlig "adress"?
Inga problem att lägga in det, men korrekt ska ju vara korrekt ;)

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-20 17:36:57 - Patrik Wårdmark

Bra fråga, men att utelämna ftp:// bör väl vara lika "korrekt" som att utelämna http:// på en webbsida... eller? :)


Svara

Sv: Stackens storlek

Postades av 2004-06-20 17:41:38 - Thomas Vanhaniemi

Testade i Internet Explorer vad den sa och enligt den är det korrekt att skriva ftp.en-url.com så jag får väl lägga in stöd för det i funktionen ;)
Har för övrigt nyss gjort en funktion i VBScript som kontrollerar om en angiven e-post adress är i korrekt format =)

Du hittar den här om det är intressant: [Validera e-post adress]

Hoppas den fungerar bra, har ju inte haft möjlighet att testa den desstomer ;)

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-20 18:55:02 - Thomas Vanhaniemi

Hej igen!

Nu har jag modifierat koden så den klarar av mellanslag i länkar som är länkade samt ftp. och ftps. länkar...

<code>
Private Function ActivateLinks(Text)
'Funktionen skapad av Thomas Vanhaniemi (thomas@eurocitynet.nu)
'Skapad 20/6 2004
'All användning tillåten

Dim RegExp
Dim Spacer
Dim SpacerPattern
Set RegExp = New RegExp

Spacer = "-%|%-"
SpacerPattern = TextToPattern(Spacer)

RegExp.Global = True
RegExp.IgnoreCase = True

'Möblera om de färdiga länkarna
RegExp.Pattern = "<a([\w\W]*?)\s+href=\s*""\s*([^""]+?)\s*""([\w\W]*?)\s*>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, "$4")

'Ersätt alla mellanslag med "%20" i alla existerande länkar
Dim Match, Matches
RegExp.Pattern = "<a\shref=""[^""\?]+"
Set Matches = RegExp.Execute(Text)
For Each Match In Matches
Text = Replace(Text, Match.Value, "<a " & Replace(Match.Value, " ", "%20", 4), 1, 1)
Next

'Radera redan länkad e-post
RegExp.Pattern = "<a\s+href=""mailto:([^""]+)""([\w\W]*?)\s*>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, " $1 " & Spacer & "$2" & Spacer & "$3" & Spacer)

'Radera redan länkade externa länkar
RegExp.Pattern = "<a\s+href=""((?:https?://|ftps?://)[^""]+)""([^>]*)>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, " $1 " & Spacer & "$2" & Spacer & "$3" & Spacer)

'Ersätt länkar
RegExp.Pattern = "(^|\s|>)(?:(https?)://|(ftp)s?://)([^\s<]+)"
Text = RegExp.Replace(Text, "$1$2$3://$4")

'Ersätt www länkar
RegExp.Pattern = "(^|\s|>)(www\.[^\s<]+)"
Text = RegExp.Replace(Text, "$1$2")

'Ersätt ftp länkar
RegExp.Pattern = "(^|\s|>)(ftps?\.[^\s<]+)"
Text = RegExp.Replace(Text, "$1$2")

'Ersätt e-post adresser
RegExp.Pattern = "(^|\s|>)([^\s""\|>]+@[^\s<\|]+)"
Text = RegExp.Replace(Text, "$1$2")

'Fixa till eventuella namn på länkar med target angett
RegExp.Pattern = "\2\s" & SpacerPattern & "(.{0,50}target="".*?"".{0,50})" & SpacerPattern & "(.{0,50})" & SpacerPattern
Text = RegExp.Replace(Text, "$4")

'Fixa till eventuella namn på länkar utan target angett
RegExp.Pattern = "\2\s" & SpacerPattern & "(.{0,50})" & SpacerPattern & "(.{0,50})" & SpacerPattern
Text = RegExp.Replace(Text, "$4")

Set RegExp = Nothing
ActivateLinks = Text
End Function

Function TextToPattern(Text)
'Funktionen skapad av Thomas Vanhaniemi (thomas@eurocitynet.nu)
'Skapad 20/6 2004
'All användning tillåten

Dim RegExp
Dim Res
Set RegExp = New RegExp

RegExp.Global = True
RegExp.IgnoreCase = True

RegExp.Pattern = "([\.\+\?\*\[\]\{\^\$\|\(\)\\])"
Res = RegExp.Replace(Text, "\$1")

RegExp.Pattern = "\n"
Res = RegExp.Replace(Res, "\n")

RegExp.Pattern = "\t"
Res = RegExp.Replace(Res, "\t")

RegExp.Pattern = "\r"
Res = RegExp.Replace(Res, "\r")

RegExp.Pattern = "\s"
Res = RegExp.Replace(Res, "\s")

Set RegExp = Nothing
TextToPattern = Res
End Function
</code>

Något mer? =)

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-20 19:22:32 - Patrik Wårdmark

Tackar!

Inget mer jag stött på ännu, men nu törs jag nog snart inte be om mer heller... ;)


Svara

Sv: Stackens storlek

Postades av 2004-06-20 19:30:27 - Thomas Vanhaniemi

Be på bara, är bara intressant att se vart funktionens "möjligheter" tar oss ;)

Mvh,
Thomas


Svara

Sv: Stackens storlek

Postades av 2004-06-20 20:57:28 - Patrik Wårdmark

Hittade exempel på en länk som inte går:

Mjölby kommuns industrihistoria - produkt & bild"

Verkar vara bindestrecket i länknamnet som orsakar det, för utan det går det.
Nåt du kan fixa? :)


Svara

Sv: Stackens storlek

Postades av 2004-06-20 21:49:37 - Thomas Vanhaniemi

Nu börjar det bli en hel del postningar här ;)
Här är koden för att fixa till problemet...

<code>
Function ActivateLinks(Text)
'Funktionen skapad av Thomas Vanhaniemi (thomas@eurocitynet.nu)
'Skapad 20/6 2004
'All användning tillåten

Dim RegExp
Dim Spacer
Dim SpacerPattern
Set RegExp = New RegExp

Spacer = "-%|%-"
SpacerPattern = TextToPattern(Spacer)

RegExp.Global = True
RegExp.IgnoreCase = True

'Möblera om de färdiga länkarna
RegExp.Pattern = "<a([\w\W]*?)\s+href=\s*""\s*([^""]+?)\s*""([\w\W]*?)\s*>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, "$4")

'Ersätt alla mellanslag med "%20" i alla existerande länkar
Dim Match, Matches
RegExp.Pattern = "<a\shref=""[^""\?]+"
Set Matches = RegExp.Execute(Text)
For Each Match In Matches
Text = Replace(Text, Match.Value, "<a " & Replace(Match.Value, " ", "%20", 4), 1, 1)
Next

'Radera redan länkad e-post
RegExp.Pattern = "<a\s+href=""mailto:([^""]+)""([^>]*)>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, vbCrLf & "$1 " & Spacer & "$2" & Spacer & "$3" & Spacer & vbCrLf)

'Radera redan länkade externa länkar
RegExp.Pattern = "<a\s+href=""((?:https?://|ftps?://)[^""]+)""([^>]*)>([\w\W]*?)</a>"
Text = RegExp.Replace(Text, vbCrLf & "$1 " & Spacer & "$2" & Spacer & "$3" & Spacer & vbCrLf)

'Ersätt länkar
RegExp.Pattern = "(^|\s|>)(?:(https?)://|(ftp)s?://)([^\s<]+)"
Text = RegExp.Replace(Text, "$1$2$3://$4")

'Ersätt www länkar
RegExp.Pattern = "(^|\s|>)(www\.[^\s<]+)"
Text = RegExp.Replace(Text, "$1$2")

'Ersätt ftp länkar
RegExp.Pattern = "(^|\s|>)(ftps?\.[^\s<]+)"
Text = RegExp.Replace(Text, "$1$2")

'Ersätt e-post adresser
RegExp.Pattern = "(^|\s|>)([^\s""\|>]+@[^\s<\|]+)"
Text = RegExp.Replace(Text, "$1$2")

'Fixa till eventuella namn på länkar med target angett
RegExp.Pattern = "(?:\r\n)\2\s" & SpacerPattern & "(.*?target="".*?"".*?)" & SpacerPattern & "(.*?)" & SpacerPattern & "(?:\r\n)"
Text = RegExp.Replace(Text, "$4")

'Fixa till eventuella namn på länkar utan target angett
RegExp.Pattern = "(?:\r\n)\2\s" & SpacerPattern & "(.*?)" & SpacerPattern & "(.*?)" & SpacerPattern & "(?:\r\n)"
Text = RegExp.Replace(Text, "$4")

Set RegExp = Nothing
ActivateLinks = Text
End Function

Function TextToPattern(Text)
'Funktionen skapad av Thomas Vanhaniemi (thomas@eurocitynet.nu)
'Skapad 20/6 2004
'All användning tillåten

Dim RegExp
Dim Res
Set RegExp = New RegExp

RegExp.Global = True
RegExp.IgnoreCase = True

RegExp.Pattern = "([\.\+\?\*\[\]\{\^\$\|\(\)\\])"
Res = RegExp.Replace(Text, "\$1")

RegExp.Pattern = "\n"
Res = RegExp.Replace(Res, "\n")

RegExp.Pattern = "\t"
Res = RegExp.Replace(Res, "\t")

RegExp.Pattern = "\r"
Res = RegExp.Replace(Res, "\r")

RegExp.Pattern = "\s"
Res = RegExp.Replace(Res, "\s")

Set RegExp = Nothing
TextToPattern = Res
End Function
</code>

Mvh,
Thomas


Svara

Nyligen

  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 786
27 960
271 761
526
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies