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

skicka vidare från underkatalog


Rest man Klaymen

Rekommendera Poster

Rest man Klaymen

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?

 

Länk till kommentar
Dela på andra webbplatser

Rest man Klaymen

jaha, bara att köra koden på 404-sidan och använda HTTP_URL istället för HTTP_REFERER. Tack så mkt!

 

Länk till kommentar
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 <------------

 

Länk till kommentar
Dela på andra webbplatser

  • 5 months later...
Rest man Klaymen

Å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?

 

Länk till kommentar
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 <---------

 

Länk till kommentar
Dela på andra webbplatser

Rest man Klaymen

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?

 

Länk till kommentar
Dela på andra webbplatser

Rest man Klaymen

Kan det ha något med doctype eller encoding att göra? Har satt Response.CharSet = "utf-8" på sidan som hämtar HTTP_URL

 

Länk till kommentar
Dela på andra webbplatser

Rest man Klaymen

bytte bort den, nu får jag &#1077;&#1076;&#1094; ist för åäö. och varken Server.URLEncode eller URLDecode lyckas göra om den rätt. Klurigt detta...

 

Länk till kommentar
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 <---------

 

Länk till kommentar
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 <---------

 

Länk till kommentar
Dela på andra webbplatser

Rest man Klaymen

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...

 

Länk till kommentar
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 <---------

 

Länk till kommentar
Dela på andra webbplatser

Rest man Klaymen

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]

Länk till kommentar
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 <---------

 

Länk till kommentar
Dela på andra webbplatser

Rest man Klaymen

Aha. Lite jobbigt dock eftersom alla kinesiska tecken ska fungera :(

 

Sen vill jag inte förväxla "sön" med "son" till exempel

 

Länk till kommentar
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 <---------

 

Länk till kommentar
Dela på andra webbplatser

Rest man Klaymen

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]

Länk till kommentar
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]

Länk till kommentar
Dela på andra webbplatser

Rest man Klaymen

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 :(

 

Länk till kommentar
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 <---------

 

Länk till kommentar
Dela på andra webbplatser

Rest man Klaymen
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!

 

Länk till kommentar
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 <---------

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...