webForumDet fria alternativet

Hur få in länkar då? (samt fråga om bilder)

ASP

6 svar · 813 visningar · startad av magnusfeldth

Medlem sedan jan. 20034 480 inlägg
Frågan#1

Jag använder följande kod för att snygga till på en textsida i asp-miljö med accesskopplingar

<%
Function Smiley(text)

text = server.HTMLEncode(text)
text = Replace(text,vbCrLf,"<br>")
text = Replace(text,"[ b]","<b>")
text = Replace(text,"[ /b]","</b>")
text = Replace(text,"[ i]","<i>")
text = Replace(text,"[ /i]","</i>")
text = Replace(text,"[ u]","<u>")
text = Replace(text,"[  /u]","</u>")
text = Replace(text,"[img]","<img src=""")
text = Replace(text,"[/img]",""">")

Response.Write text

End Function
%><% = smiley(RecSet("text")) %>

Men hur tusan ska man få in länkar då? Alltså en URL-tag.

Och kan man på nåt sätt lägga in en maxstorlek på img-taggen, alltså att bildernas bredd-storlek får max vara X pixlar stor?

(fick lägga till mellanslag i koden på textformat-taggarna, annars ändrade wF om dem ;) )

Medlem sedan aug. 20039 340 inlägg
#2

Till att börja med, redan den koden du har är osäker. Fundera på vad som skulle hända om någon skrev t ex:

[img]http://www.exempel.com/bild.png" onload="alert('Hejsan');
Medlem sedan jan. 20034 480 inlägg
#3

nåt förslag på totaländring?

Medlem sedan aug. 20039 340 inlägg
#4

Jag skulle ha använt en regular expression, som typ såg ut så här:

#\[img\]http://[^[]\.(gif|jpe?g|png)\[/img\]#

Sedan köra replace med den. Dock kvarstår ett problem, du bör encodea url'en på ett sådant sätt att du inte tillåter kod att skrivas in i URL'en. Hur du gör detta i ASP har jag ingen aning om, men i PHP hade du kunnat använda e-flaggan som tillåter körning av kod, och göra typ så här:

preg_replace('#\[img\](http://[^[]\.(gif|jpe?g|png))\[/img\]#ie', 
             ' "<img src=\\"" . urlencode("\\1") . "\\" />" ')

# och # är start och slut-tecken. Här kan man välja i princip i vad man vill för tecken. Normalt väljer man / men här valde jag # för att slippa escapea / i subjektet.
Sedan följer något som matchar . Avslutning med # igen och sedan två flaggor, i för case insensitive, och sist e som nämnt tidigare för att köra replacement-strängen som kod. Koden i sin tur kör fogar samman en img-tagg och kör urlencode för att vara säker på att alla "onda" tecken i URL'en försvinner.

Men det är ju PHP. Hur man omvandlar det till ASP på ett bra och säkert sätt vet jag alltså inte.
Observera också att koden ovan är snabbt ihopkrafsad, otestad och den bör troligen inte användas i det skicket den är i.

Medlem sedan aug. 20039 340 inlägg
#5

En snabb paddling på bbcode asp gav detta som du kan studera: http://snukie.wordpress.com/2008/05/15/asp-bbcode-parser/
Hans lösning på problemet med "onda" tecken är att ersätta <, >, & och " med <, >, ∓ och " och sedan gå över strängen med en rad regexar.
Jag hade personligen gjort vissa av matchningarna striktare, t ex krävt att länkar måste börja med http. Med hans kod kan man t ex skriva in [url]javascript:alert("Hej"); och koden kommer köras när man klickar på länken, om jag inte tolkar hans regex fel.
Men det är ett bra exempel att utgå ifrån åtminstone.

Medlem sedan jan. 20034 480 inlägg
#6

ok, snukies sätt verkar ganska bra, och jag tror jag förstår koden såpass att jag kan ändra för att få det att bli som jag vill ha det... ska testa imorgon och meddela hur det funkar! tack på förhand!

Medlem sedan jan. 20034 480 inlägg
#7

nu testat och fått in ovan lösning med bra resultat :)

tack nitro!

261 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)