webForumDet fria alternativet

Lägga till http:// om det saknas vid sändning av formulär

ASP

7 svar · 585 visningar · startad av lbs129

Medlem sedan apr. 200899 inlägg
Frågan#1

Hej!

Jag har kodat en gästbok i ASP där ett fält som kan kan fylla i vid postning är hemsida. Problemet är att alla inte skriver http:// framför webbadressen. Det gör att länken till personens hemsida blir http://www.minadress.se/www.postarenshemsida.se.

Lägger jag http:// som förifyllt värde i formuläret så kommer det att visas en hemsidelänk även om postaren inte har någon hemsida. Därför har jag tänkt att man i ASP-koden borde kunna kolla om Request.Form("hemsida") inleds med http:// Om det inte är så så läggs det till innan det sparas i databasen. Är det möjligt?

Tack på förhand! :)

Mvh Johan

Medlem sedan sep. 2004828 inlägg
#2

Ja det är möjligt.
dim hemsida
hemsida = Request.Form("hemsida")
if lcase(left(hemsida,4))<>"http" then hemsida = "http://" & hemsida

Det gör att det fungerar med både http och https (anger man inget antas http). Dock fungerar inte ftp och andra protokoll, men det gör väl inget?

Medlem sedan apr. 200899 inlägg
#3

Tack så mycket! Det fungerade alldeles utmärkt! :D

Mvh Johan

Medlem sedan aug. 20039 340 inlägg
#4

Ett litet tips, använd Server.HTMLEncode på värden du skriver ut för att hindra folk från att göra elaka saker.

<a href="<%= Server.HTMLEncode(hemsida) %>"><%= Server.HTMLEncode(namn) %></a>
...
Kommentar: <%= Server.HTMLEncode(kommentar) %></a>

Utan HTMLEncode sådan kod skulle jag t ex kunna skriva in följande "hemside-adress":

http://www.google.se" onmouseover="alert('Hej')

Pröva att skriva detta som adress till ditt nuvarande skript!
Detta skrivs då ut som

<a href="[u]http://www.google.se" onmouseover="alert('Hej')[/u]">

(Min sträng är understruken för att förtydliga.)
Denna kod visar bara en alert-ruta när man drar musen över den, men det går att göra långt mer elaka saker.
Med HTMLEncode skrivs det istället ut som

<a href="[u][url]http://www.google.se&quot;[/url] onmouseover=&quot;alert('Hej')[/u]">

vilket visserligen är "nonsens", men faran är undanröjd.

Medlem sedan apr. 200899 inlägg
#5

Tack för tipset! :)

Jag hade satt Server.HTMLEncode på själva meddelandetexten men inte på hemsideadressen. Det är fixat nu!

Här kan ni se hur gästboken ser ut just nu om ni vill (hela sidan är en beta-version än så länge):
http://test.jwebb.se/gastbok.asp

Alla inlägg nu är bara test och exempel. Koden som jag använder för att skriva ut inläggen är denna:

<div class="inlagg">
	<div class="infocontainer">
		<div class="namnplats"><%=Server.HTMLEncode(RecSet("namn"))%><% IF RecSet("bori") <> "" THEN %>&nbsp;i&nbsp;<%=Server.HTMLEncode(RecSet("bori"))%><% END IF %></div>
		<div class="lankar"><% IF RecSet("hemsida") <> "" THEN %><a href="<%=Server.HTMLEncode(RecSet("hemsida"))%>" target="_blank"><img src="images/house.png" alt="<%=Server.HTMLEncode(RecSet("namn"))%>:s hemsida"></a><% END IF %><% IF RecSet("visaepost") = "ja" THEN %>&nbsp;&nbsp;<a href="mailto:<%=Server.HTMLEncode(RecSet("epost"))%>" target="_blank"><img src="images/email.png" alt="<%=Server.HTMLEncode(RecSet("namn"))%>:s e-post"></a><% END IF %></div>
		<div class="datum"><%=RecSet("datum")%></div>
	</div>
	<div class="meddelande">
	<% Dim meddelande
	meddelande = RecSet("meddelande")
	meddelande = Server.HTMLEncode(meddelande)
	meddelande = Replace(meddelande,":)","<img src='images/emoticon_smile.png'>")
	meddelande = Replace(meddelande,":D","<img src='images/emoticon_grin.png'>")
	meddelande = Replace(meddelande,":P","<img src='images/emoticon_tongue.png'>")
	meddelande = Replace(meddelande,":(","<img src='images/emoticon_unhappy.png'>")
	meddelande = Replace(meddelande,";)","<img src='images/emoticon_wink.png'>")
	Response.Write meddelande %>
	</div>
</div>

Tack för hjälpen! :)

Mvh Johan

Medlem sedan sep. 2004828 inlägg
#6

Fast borde man inte använda Server.UrlEncode på adressen?

Medlem sedan aug. 20039 340 inlägg
#7

StefanBergfeldt skrev:

Fast borde man inte använda Server.UrlEncode på adressen?

Nej. Den funktionen encodar http:// till http%3A%2F%2F vilket blir tokfel i detta fall. Däremot är UrlEncode utmärkt för att skicka med en URL (eller annan data med förbjudna tecken) som parameter till en querystring, typ:

<a href="redirect.asp?goto=<%= Server.UrlEncode(hemsida) %>">...</a>
Medlem sedan sep. 2004828 inlägg
#8

Just det, så är det ja...
Känns som 100 år sedan jag gjorde något i det gamla asp.

257 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)