webForumDet fria alternativet

Korta ner länknamn

ASP

7 svar · 6 994 visningar · startad av Erik Juhlin

Medlem sedan maj 200010 687 inlägg
Frågan#1

En funktion för att korta ner länknamn (inom <a>\</a>). Fungerar som webForums.

Function ShortenLinkName(sHTML, lFirstLength, lLastLength)
	Dim objRegExp
	Set objRegExp = New RegExp
	objRegExp.Global = True
	objRegExp.IgnoreCase = True
	
	objRegExp.Pattern = "(<a [^>]+>)([\s\S]{" & lFirstLength & "}?)([\s\S]+?)([\s\S]{" & lLastLength & "}?)(</a>)"
	
	ShortenLinkName = objRegExp.Replace(sHTML, "$1$2...$4$5")
	Set objRegExp = Nothing
End Function

wF lägger till mellanslag mellan > och ) så de får ni ta bort!

GLHF - Good Luck Have Fun!

Medlem sedan nov. 2001402 inlägg
#2

Ok, en nybörjarfråga, hur får jag in den funktionen i den här koden?


response.write "</td>"

response.write "<td width=""70%"" valign=""top"">"

strNyText = ""
strText = rs("message")

varArray = split (strText, " ")
for i = 0 to ubound(varArray)
    strNyText = strNyText & Left(varArray( i ), 50) & " "
next

strComText = server.HTMLEncode(strNyText)
strComText = Replace(strComText,vbcrlf,"<BR>")

Response.Write strComText

response.write "</td>"
response.write "</tr>"
response.write "</table>"
end if

response.write "<img src=""images/grafic/pixel_grey.gif"" width=""462"" height=""1""><br>"

rs.movenext
Count = Count + 1
loop
Medlem sedan maj 200010 687 inlägg
#3

Om du har en text som innehåller länkar (t.ex. <a href="somewhere">asdf asdf asdf asdf asdf</a>) så skriver du bara:

txt = ShortenLinkName(txt, 5, 5)
Medlem sedan nov. 2001402 inlägg
#4

Nu hänger jag inte med på vad du svarade på Erik. :)

Jag har forumkoden jag klistrade in där uppe i dagsläget, resultatet i forumet blir så här:

http://www.skate.nu/forum_topic.asp?id=3316

Istället vill jag att alla texter som börjar med www. eller http:// eller http://www. automatiskt ska bli länkar.

och att alla långa länkar ska kortas så att man bara ser början och slutet med ... emellan.

dessutom vill jag att alla långa ord typ "blablablablablablablablablablablablablablablablablabla" ska visas som "blablablablablabla....blablablablablabla".

Går det genom att kombinera min kod ovanför och din funktion ovanför?

Eftersom jag inte skrivit koden själv och inte förstår den så mycket, skulle det vara schysst om nån kan sammanfoga koderna och lägga allt komplett i en kodruta, klart att ersätta i min asp-fil.

Lösa koder kommer jag inte riktigt veta var jag ska få in dem.

Tack på förhand.

Har du slutat skata förresten? Kommer ihåg din skatesida från back in the days.

Medlem sedan juni 20019 519 inlägg
#5

Kan kanske vara bra att starta en tråd på ASP forumet för din fråga men

Använd Eriks:

Function ShortenLinkName(sHTML, lFirstLength, lLastLength)
	Dim objRegExp
	Set objRegExp = New RegExp
	objRegExp.Global = True
	objRegExp.IgnoreCase = True
	
	objRegExp.Pattern = "(<a [^>]+>)([\s\S]{" & lFirstLength & "}?)([\s\S]+?)([\s\S]{" & lLastLength & "}?)(</a>)"
	
	ShortenLinkName = objRegExp.Replace(sHTML, "$1$2...$4$5")
	Set objRegExp = Nothing
End Function

Och:

Function LinkURL(str)
	Dim objRegExp, strTemp
	Set objRegExp = New RegExp

	objRegExp.IgnoreCase = True
	objRegExp.Global = True
	objRegExp.Pattern = "(\b(www\.|http\://)\S+\b)"
	strTemp = objRegExp.replace(str, "<a href=""http://$1"" target=""_new"">$1</A>")
	LinkURL = Replace(strTemp, "http://http://","http://")
	Set objRegExp = Nothing
End Function

(Kan skrivas bättre men hittade bara denna när jag googlade).

Efter:

strComText = server.HTMLEncode(strNyText)
strComText = Replace(strComText,vbcrlf,"<BR>")

Skriver du:

strComText = LinkURL(strComText)
strComText = ShortenLinkName(strComText, 5, 5)
Medlem sedan nov. 2001402 inlägg
#6

Kan starta en ny tråd där istället om ni föredrar det?

Exakt var klistrar man in Functionkoderna, jag får felmeddelande när jag lägger in dem:

"Microsoft VBScript compilation error '800a03ea'

Syntax error

/forum_topic_test.asp, line 246

Function ShortenLinkName(sHTML, lFirstLength, lLastLength)"

Medlem sedan juni 20019 519 inlägg
#7

Starta gärna en ny tråd ;)

Men du försöker vad jag gissar på att du har båda funktionerna i din loop... Lägg dom längst upp innan du gör "Do until rs.EOF" eller i en egen fil och kör en include på den.

Medlem sedan nov. 2001402 inlägg
#8

Fan va grymt, tusen tack!

Behöver inte starta ny, för verkar fungera finfint nu.

fick dock ändra

strComText = Replace(strComText,vbcrlf,"<BR>")

och lägga till ett mellanslag innan radbrytningen, annars blev det en massa buggar av någon anledning.

strComText = Replace(strComText,vbcrlf," <BR>")
259 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)