webForumDet fria alternativet

Problem med att skapa länk med regexp

ASP

38 svar · 869 visningar · startad av joel_joel88

Medlem sedan nov. 20021 222 inlägg
Frågan#1

Hej!

har denna kod för att skapa länkar från en adress, fast det fungerar inte, halva länkkoden skrivs ut.
Vad är fel?

Så här skrivs det ut skrev:

href="www.testar.nu" target="_blank">

Set objRegExp = New regexp
objRegExp.Global = true
objRegExp.IgnoreCase = true
strtxt = Server.HTMLEncode(strtxt)
strTxt = trim(request("inlagg"))

objRegExp.Pattern = "(www\.(\S)(\S+))"
  strTxt = objRegExp.Replace(strTxt, "<a href=""$1"" target=""_blank"">")

objRegExp.Pattern = "((?:mailto\:|(?:news|(?:ht|f)tp(?:s?))\://){1}\S+)"
   strTxt = objRegExp.Replace(strTxt, "<a href=""$1"" target=""_blank"">")
Medlem sedan jan. 2003438 inlägg
#2

Vet inte riktigt hur det ser ut när du hämtar det från databasen, men om det står typ www.testar.nu så skall det funkar om du ändrar detta.

  strTxt = objRegExp.Replace(strTxt, "<a href=""$1"" target=""_blank"">$1</a>")

Som det är tidigare avslutar du inte med sluttagg.

Medlem sedan nov. 20021 222 inlägg
#3

Fungerar inte än. Det fungerar att t.ex skriva https://www.test.nu
och http://www.test.nu, fast så fort man skriver båda i samma text, då fungerar det inte, då skrivs det som jag sa ut.

Medlem sedan nov. 20021 222 inlägg
#4

När jag skriver ut flera adresser så blir det som sagt fel. Jag tog då visa källa och kollade hur det blev...

<a href="http://<a" target="_blank">[url]http://[/url]<a></a> href="www.testar.nu" target="_blank">[url]www.testar.nu[/url]</a

knepigt va?

Medlem sedan jan. 2003438 inlägg
#5

Har suttit och sökt å lekt lite, kom fram till följande funktion. Enligt vad jag kan komma fram till så funkar den som den skall:

<%
Function ConvertLink(strText)
  strText = Replace(Server.HTMLEncode(strText),vbCrLf,"<br>")
  Set objRegExp = New RegExp
  objRegExp.Global = True
  objRegExp.IgnoreCase = True
	
  ' Reagerar på.. www.webforum.nu
  If Left(Trim(strText), 3) = "www" Then
      objRegExp.Pattern = "(www\.(\S)(\S+))"
      strText = objRegExp.Replace(strText, "<a href=""http://$1"" target=""_blank"" title=""Besök $1"">$1</a>")
  
  'Reagerar på.. [ url]http://www.webforum.nu[/url] 
  elseif Left(strText, 12) = "[url]http://" then
      strLink = Split(strText, "//")
      Link = Replace(strLink(1), "[/url]", "")	
    objRegExp.Pattern = "\[url\](.*?)\[\/url\]"
    strText = objRegExp.Replace(strText, "<a href=""$1"" target=""_blank"" title=""Besök "&Link&""">"&Link&"</a>")

  'Reagerar på.. [ url=http://www.webforum.nu]Länktext[/url]
  elseif Left(strText, 5) = "[url=" then
     objRegExp.Pattern = "\[url=(.*?)\](.*?)\[\/url\]"
     strText = objRegExp.Replace(strText, "<a href=""$1"" target=""_blank"" title=""Besök $2"">$2</a>")

  'Reagerar på.. http://www.webforum.nu
  else
    objRegExp.Pattern = "((?:mailto\:|(?:news|(?:ht|f)tp(?:s?))\://){1}\S+)"
    If Left(Trim(strText), 7) = "http://" then
      strLink = Split(strText, "//")
      Link = strLink(1)	

      strText = objRegExp.Replace(strText, "<a href=""$1"" target=""_blank"" title=""Besök "&Link&""">"&Link&"</a>")
    else if Left(Trim(strText), 7) = "mailto:" then
      TempLink = split(strText, ":")
      TempMailName = split(TempLink(1), "@")
      TempName = split(TempMailName(0), ".")

      FirstName= TempName(0)
      LastName = TempName(1)

      MailName = UCase(Left(FirstName,1)) & LCase(Mid(FirstName,2)) &"&nbsp;"& UCase(Left(LastName,1)) & LCase(Mid(LastName,2))

      strText = objRegExp.Replace(strText, "<a href=""$1"" target=""_blank"" title=""Skicka ett mail till "&MailName&""">"&MailName&"</a>")
    end if
  end if
  end if
ConvertLink = strText
End Function

response.write  ConvertLink("http://www.webforum.nu")
%>

Du skall ersätta:

response.write  ConvertLink("www.webforum.nu")

med din RS från databasen

response.write  ConvertLink(request("inlagg"))

/r
Finns lite mellanslag på url på beskrivningarna, texten såg ut som en stor länk. Lite trött och fick inte till inlägget riktigt. :OO

Medlem sedan jan. 2003438 inlägg
#6

Att skriva ut flera adress i funktionen som jag gjort kommer inte att fungera heller kom jag på.

Problemet som uppkommer är att båda dina pattern uppfylls och de ändras. Om du kan se till att samtliga länkar har samma format så funkar nedanstående, problem uppstår som sagt vid olika.

<%
strTxt = "www.testar.nu www.testar.nu"
Set objRegExp = New regexp
objRegExp.Global = true
objRegExp.IgnoreCase = true
strtxt = Server.HTMLEncode(strtxt)

objRegExp.Pattern = "(www\.(\S)(\S+))"
  strTxt = objRegExp.Replace(strTxt, "<a href=""http://$1"" target=""_blank"">$1</a>")

response.write strTxt
%>
Medlem sedan nov. 20021 222 inlägg
#7

Hur kommer det säg att det bara fungerar om man har samma format? Måste ju fungera på något sätt, fast du kanske inte vet det.

Tack för hjälpen trotts allt.

Medlem sedan nov. 20021 222 inlägg
#8

Man kan väl fixa så att dom har samma format med replace.

t.ex om man vill att det ska bara vara https://www.hej.nu

då tar man

strTxt = Replace(strTxt, "http://", "")

Det bör fungera, fast jag vill fortfarande att det ska fungera om man skriver olika, jag är stönig :)

Medlem sedan nov. 20021 222 inlägg
#9

Någon som vet?

Medlem sedan jan. 2003438 inlägg
#10
<%
strTxt = "www.testar.nu [url]http://www.testar.nu[/url] [url]http://www.testar.nu[/url]"
strTxt = Server.HTMLEncode(strTxt)
strTxt = Replace((strTxt),vbCrLf,"<br>")
set objRegExp = new RegExp
objRegExp.Global = true
objRegExp.IgnoreCase = true
'fixa länkar och e-postadresser
objRegExp.Pattern = "([url]www.[/url][^ ]*[a-z])|([url]http://[/url][^ ]*[a-z])"
strTxt = objRegExp.Replace(strTxt,"<a href=""$1$2"" target=""_blank"">$1$2</a>")

'buggfixningar
strTxt = Replace(strTxt,"""www","""http://www")
strTxt = Replace(strTxt,"""http://www""","""www""")
'slut

Set RegExp = Nothing

Response.Write strTxt
%>
Medlem sedan nov. 20021 222 inlägg
#11

Tack så mycket SannyW, du är en pärla :)

en ska till bara, varför har du flera appostrofer i
strTxt = Replace(strTxt,"""www","""http://www")?

Medlem sedan nov. 20021 222 inlägg
#12

hmm, allt fungerar bra utom en grejj, när t.ex ska skapa en länk som denna

http://www.silentwings.no/article/articleview/55/1/9/

så blir det bara en länk fram till / efter articleview. Vad beror detta på?

Medlem sedan jan. 2003438 inlägg
#13

Måste gå med på att släppa igenom siffror

ändra till detta:

objRegExp.Pattern = "([url]www.[/url][^ ]*[\w])|([url]http://[/url][^ ]*[\w])"

Angående det med appostrofer så har jag inget riktigt svar, fick hjälp av en tråd på forumet. Och det som jag kan se är att det beror på href som blir fel. Snutt problem....

Medlem sedan nov. 20021 222 inlägg
#14

Jag gjorde det, kollade på webeye.nu. Såg det och satte dit det. Men tack för hjälpen :)

Medlem sedan nov. 20021 222 inlägg
#15

Fan, ett problem till.

Om jag skriver flera länkar så blir alla som en länkar under varandra. Det blir t.ex så här. Ska det vara något som känner av att det måste vara hela "texter" för att skapa en länk? Altså inget radbyte, eller mellanslag.

http://www.test.nu<br>https://www.test.nu<br>http://test.nu

Medlem sedan jan. 2003438 inlägg
#16

:) Kanske beror det på "små timmarna" eller bara på mig. Men jag är INTE riktigt med på vad du menar.

Medlem sedan nov. 20021 222 inlägg
#17

Altså om jag skriver flera länkar, så blir alla en och samma.
Klickar man på en så har alla adresser lagt ihop sig. Om man även har radbrytning så har <br> lagts till i adressen.

Medlem sedan jan. 2003438 inlägg
#18

Hmm, om jag förstår rätt nu så har du skrivit:

http://www.test.nu<br>https://www.test.nu<br>http://test.nu

då är det inte konstigt att det blir en och samma länk. Finns det någon anledning att använda <br> på det viset?

Medlem sedan nov. 20021 222 inlägg
#19

Det är så att jag har ett forum, där så har jag testat och gjort ett inlägg. Då har jag skrivit så här

http://www.test.nu
https://www.test.nu
http://www.test.nu

Det blir ju <br> eftersom jag har en replace som byter ut Vbcrlf till <br>.

Medlem sedan jan. 2003438 inlägg
#20
<%
strTxt = "www.testar.nu<br>[url]http://www.testar.nu[/url] [url]http://www.silentwings.no/article/articleview/55/1/9/[/url]"
strTxt = Replace(strTxt,"<br>",vbCrLf)
strTxt = Server.HTMLEncode(strTxt)
strTxt = Replace(strTxt,vbCrLf,"<br>")
set objRegExp = new RegExp
objRegExp.Global = true
objRegExp.IgnoreCase = true

'fixa länkar och e-postadresser
objRegExp.Pattern = "([url]www.[/url][^ ]*[\w])|([url]http://[/url][^ ]*[\w])"
'strTxt = objRegExp.Replace(strTxt,"<a href=""$1$2"" target=""_blank"">$1$2</a>")
strTxt = objRegExp.Replace(strTxt,"<a href='$1$2' target='_blank'>$1$2</a>")

'buggfixningar
strTxt = Replace(strTxt,"'www","'http://www")
strTxt = Replace(strTxt,"''http://www","''www")
'slut

Set RegExp = Nothing

printRows = Split(strTxt, "<br>")

For i = 0 To Ubound(printRows)
   Response.Write printRows(i)
   Response.Write "<br>"
Next

%>
270 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)