Just nu i M3-nätverket
Gå till innehåll
Rest man Klaymen

skicka vidare från underkatalog

Rekommendera Poster

Visste inte hur jag skulle sammanfatta det hela i titeln, men så här menar jag:

 

Hur gör man för att skicka vidare en besökare till en viss sida beroende på vilken "underkatalog" besökaren skriver in? Exempelvis www.sida.com/sven så ska man skickas vidare till sidan person.asp?id=x där x står för svens id i databasen.

 

Jag gjorde en ghettolösning som fungerade så här:

 

Jag lade in en snutt JS i "404-not found"-feldokumentet på webhotellet, som skickar vidare besökaren till redirect.asp, som sedan fångar upp HTTP_REFERER och splittar upp den strängen efter "/"-tecken. Den sista posten i denna array innehåller ju då namnet på personen man söker efter, varvid en SQL-fråga hämtar id-numret för den personen från databasen och skickar besökaren till person.asp.

 

Detta fungerar utmärkt, förutom när diverse inställningar gör att klienten inte skickar någon HTTP_REFERER. Då kraschar allt. Så frågan är: Hur ska man göra egentligen? Går det att göra på ett webhotell eller behöver man kontroll över servern?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ja typ, men snyggare blir det dock om du använder server.execute istället för redirect eftersom sökmotorer (och webbläsare med för den delen) då får status 200 som retur istället för 302. Du vill ju trots allt att det skall se ut som om att sidan/katalogen faktiskt finns.

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Återbesök i gammal tråd!

Fick problem med Server.Execute eftersom den inte tillåter querystrings... Går det att skicka status 200 på något annat sätt?

 

Dessutom omvandlas alla specialtecken (typ åäö) till ? i HTTP_URL vilket är dumt eftersom databasnamnen kan innehålla alla möjliga tecken. Vad gör jag åt det?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Går det att skicka status 200 på något annat sätt?
Response.Status = "200 OK"

Fler statuskoder (ibland så vill man ju faktist skicka t.ex. 301 eller 410):

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

 

[...](typ åäö) till ? i HTTP_URL [...] Vad gör jag åt det?
Du får väl skapa en funktion som återställer dem :)

Har inte tittat så noga på HTTP_URL eller hur den fungerar men inte blir väl allt frågetecken? Det är väl samma resultat som en Server.URLEncode ?

I så fall så:

	Function URLDecode(sConvert)
	If IsNull(sConvert) Then
	   URLDecode = ""
	   Exit Function
	End If
	sOutput = Replace(sConvert, "+", " ")
	aSplit = Split(sOutput, "%")
	If IsArray(aSplit) Then
	  sOutput = aSplit(0)
	  For I = 0 to UBound(aSplit) - 1
		sOutput = sOutput & _
		  Chr("&H" & Left(aSplit(i + 1), 2)) &_
		  Right(aSplit(i + 1), Len(aSplit(i + 1)) - 2)
	  Next
	End If
	URLDecode = sOutput
End Function

 

 

/Cluster

------------------------------------------------------

I do not fear computers. I fear the lack of them

--------> http://eforum.kicks-ass.net <---------

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Har provat den funktionen, utan resultat tyvärr. Därför att alla tecken åäö + utländska tecken blir ? när jag kallar Request.ServerVariables("HTTP_URL")

 

Då är det svårt att konvertera tillbaka dem :)

 

Men det måste väl gå att göra på nåt annat sätt?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ja det kan det nog vara om du använder en annan teckentabell i övrigt. Du ska alltid se till så att använda samma teckentabell (helst då utf-8) i alla steg (databasen och dess tabeller, asp-sidans codepage, charset i html-markup osv.).

 

/Cluster

------------------------------------------------------

I do not fear computers. I fear the lack of them

--------> http://eforum.kicks-ass.net <---------

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ok, det tycks ju vara html-enkodat. Testa med:

Function HTMLDecode(sText)
  Dim I
  sText = Replace(sText, "&quot;", Chr(34))
  sText = Replace(sText, "&lt;"  , Chr(60))
  sText = Replace(sText, "&gt;"  , Chr(62))
  sText = Replace(sText, "&amp;" , Chr(38))
  sText = Replace(sText, "&nbsp;", Chr(32))
  For I = 1 to 255
     sText = Replace(sText, "&#" & I & ";", Chr(I))
  Next
  HTMLDecode = sText
End Function

 

/Cluster

------------------------------------------------------

I do not fear computers. I fear the lack of them

--------> http://eforum.kicks-ass.net <---------

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ja nu får jag ut åäö på skärmen i varje fall, men den lyckas inte hämta från databasen. Detta är alltså om jag kommenterar bort raden

 

Response.CharSet = "utf-8"

 

Men borde jag inte ha den?

Har gått in i Management studio express för MS SQL-databasen och sett att collation står på "SQL_Latin1_General_CP1_CI_AS" vilket ju inte bör vara rätt. Hittar dock ingen UTF-8 i listan.

 

Grejen är ju att jag vill att det ska funka för valfritt tecken egentligen, även tex turkiska och japanska...

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Vad är det för fält du försöker hämta och hur ser dessa ut?

Jag har i vissa fall skapat ytterligare ett fält med "friendly url" dvs en variant av namn-fältet som enbart innehåller godkända tecken för en url (dessa tar jag fram i asp-koden samma veva som raden läggs till).

 

Ang. databasen och språkstöd:

http://msdn.microsoft.com/en-us/library/bb330962.aspx

samt

http://msdn.microsoft.com/en-us/library/aa176552(SQL.80).aspx

och

http://msdn.microsoft.com/en-us/library/aa258233(SQL.80).aspx

 

/Cluster

------------------------------------------------------

I do not fear computers. I fear the lack of them

--------> http://eforum.kicks-ass.net <---------

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Det är vanliga varchar()-fält

 

Jag provade att göra som du sa, la till ett fält där jag sparar det som skickas från formuläret

Server.URLEncode(Request.Form("title"))

i ett varchar-fält

 

problemet är att det som sparas i databasen är två tecken

[procent]C3[procent]B6 

(bytte % mot [procent] för jag vet inte vad eforum gör annars)

 

medans när jag skriver ö i url får enbart ett tecken

[procent]F6

 

hur kan jag jämföra dessa?

 

 

EDIT: jag bytte ut alla % mot [p] innan jag skickade till databasen, för att vara säker på att det inte är den som omvandlar till fel. men då blev det [p]C3[p]B6 som sparades så det är min sida som gör om det fel på något sätt... detta trots att den har utf-8 som teckentabell...

[inlägget ändrat 2008-05-06 11:14:45 av Rest man Klaymen]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
sparar det som skickas från formuläret [...]Server.URLEncode
Ok, jag menade ännu mer "friendly" dvs. en hemmasnickrad funktion typ:
Function makeFurl(str)
 str=Trim(str)
 str=Replace(str,"Å", "A")
 str=Replace(str,"å", "a")
 str=Replace(str,"Ä", "A")
 str=Replace(str,"ä", "a")
 str=Replace(str,"Ö", "O")
 str=Replace(str,"ö", "o")
 str=Replace(str,"É", "E")
 str=Replace(str,"é", "e")
 str=Replace(str,"Ü", "U")
 str=Replace(str,"ü", "u")
 str=Replace(str,"Ø", "O")
 str=Replace(str,"ø", "o")
 str=Replace(str,"Æ", "Ae")
 str=Replace(str,"æ", "ae")
 str=Replace(str,"&", "-")
 str=Replace(str,"/", "-")
 str=Replace(str," ", "-")
 str=Replace(str,"(", "-")
 str=Replace(str,")", "-")
 str=Replace(str,":", "")
 str=Replace(str,"?", "")
 str=Replace(str,"!", "")
 makeFurl=str
End Function

Som du ju får anpassa efter de tecken du behöver hantera.

 

/Cluster

------------------------------------------------------

I do not fear computers. I fear the lack of them

--------> http://eforum.kicks-ass.net <---------

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ja du, tror tyvärr att det blir svårt att få det att fungera med kinesiska tecken i url:en :(

 

Har du några exempel på ord/namn som man kan testa på?

 

/Cluster

------------------------------------------------------

I do not fear computers. I fear the lack of them

--------> http://eforum.kicks-ass.net <---------

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Sen är det lite underligt att om jag skriver

 

%E5%85%B6%E4%BB%96%E7%9A%84 i min url, och skriver ut Request.Servervariables("HTTP_URL") så blir det bara tre frågetecken...

 

jag har doctype och meta taggar samt Response.CharSet = "utf-8"

 

EDIT: samma med %E5%E4%F6 som ju borde bli åäö, eller iaf stanna kvar som %E5%E4%F6

[inlägget ändrat 2008-05-06 11:42:31 av Rest man Klaymen]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
%E5%E4%F6 som ju borde bli åäö

Om jag sparar filen som UTF-8 (måste väljas som Kodning, i spara som i t.ex. Notepad) och kör:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Konstiga tecken...</title>
</head>

<body>
  <p>Server.URLEncode("ÅÄÖ") = <%=Server.URLEncode("ÅÄÖ")%></p>
</body>
</html>

Så får jag ut:

Server.URLEncode("ÅÄÖ") = %C3%85%C3%84%C3%96

 

 

För olika UTF-8-funktioner kolla på: http://www.codetoad.com/asp_utf8.asp

 

/Cluster

I do not fear computers. I fear the lack of them

> http://eforum.kicks-ass.net <-

 

[inlägget ändrat 2008-05-06 12:35:30 av Cluster]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Japp! Det får jag också, vilket jag sparar i databasen!

 

När jag sen går till sidan "domain.com/ÅÄÖ" så blir det "domain.com/%C5%C4%D6" istället, och det är ju inte det jag har sparat i databasen :(

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Om jag gör "samma" manöver fast med ansi:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Knepiga tecken</title>
</head>

<body>
<%
Function URLDecode(sConvert)
If IsNull(sConvert) Then
   URLDecode = ""
   Exit Function
End If
sOutput = Replace(sConvert, "+", " ")
aSplit = Split(sOutput, "%")
If IsArray(aSplit) Then
  sOutput = aSplit(0)
  For I = 0 to UBound(aSplit) - 1
	sOutput = sOutput & _
	  Chr("&H" & Left(aSplit(i + 1), 2)) &_
	  Right(aSplit(i + 1), Len(aSplit(i + 1)) - 2)
  Next
End If
URLDecode = sOutput
End Function

strOriginalText = "ÅÄÖ"
strURLEncodedText = Server.URLEncode(strOriginalText)
strURLDecodedText = URLDecode(strURLEncodedText)
%>
<p>strOriginalText = <%=strOriginalText%></p>
<p>strURLEncodedText = <%=strURLEncodedText%></p>
<p>strURLDecodedText = <%=strURLDecodedText%></p>
</body>
</html>

så får jag följande output:

strOriginalText = ÅÄÖ

strURLEncodedText = %C5%C4%D6

strURLDecodedText = ÅÄÖ

 

Man kan därav dra slutsatsen att din webbläsare url-encodar enligt ansi (finns säkert någon inställning i klienten för detta någonstans).

 

Problemet blir alltså att du inte kan veta enligt vilken tecken-tabell som besökarens anrop (url:en) är encodat. Därför så känns din lösning inte helt optimal med lokaliserade virtuella mappar på detta sätt.

 

 

/Cluster

------------------------------------------------------

I do not fear computers. I fear the lack of them

--------> http://eforum.kicks-ass.net <---------

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Därför så känns din lösning inte helt optimal med lokaliserade virtuella mappar på detta sätt.

 

Nej, det verkar som det är en återvändsgränd detta. Jag får lösa det på något annat vis helt enkelt.

 

Måste tacka så jättemycket för all hjälp du gett mig! Väldigt lärorikt!

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ja, tyvärr så får det nog bli så.

 

Alltid kul att hjälpa till, även om det ibland innebär att hjälpa till med att komma fram till att det hela inte fungerar som tänkt.

 

 

/Cluster

------------------------------------------------------

I do not fear computers. I fear the lack of them

--------> http://eforum.kicks-ass.net <---------

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...