Avatar billede c-sharp Nybegynder
27. september 2006 - 14:03 Der er 36 kommentarer og
2 løsninger

Hjælp til querystring

Jeg forsøger at lave lidt kode der skal håndtere nogle mail formulare. Dvs at man fra en html side kan sende en mail med x antal oplysninger. noget alla:

<form method="POST" action="http:www.test.dk/sendmail.aspx" onsubmit>

  <input type="hidden" name="_nextpage" value="http://www.test.dk/tak.htm">

.....

</form>
 
Mine problemer er følgende:

1. Når method="post" i formen modtager jeg ikke noget via quesystring, sætter jeg den til param modtager jeg alt for meget. Jeg ved ikke hvilke felter der er i den form men skal bare udskive dem alle.

2. Ændre jeg method="GET" til kan jeg godt modtage parameterne men så mangler æ ø å, vil også helst proge post...
Avatar billede thrytter Nybegynder
27. september 2006 - 14:38 #1
Hvis du bruger "post" kan du fange værdierne i Request.Form
Avatar billede c-sharp Nybegynder
27. september 2006 - 14:51 #2
Pt. bruger jeg string[] parameter = Request.Querystring; for at få alle parameternedet virker ikke med Form...
Avatar billede coderdk Praktikant
27. september 2006 - 15:23 #3
Så må du jo bare loope igennem Request.Form med foreach? :)
Avatar billede c-sharp Nybegynder
27. september 2006 - 15:29 #4
Det er også det jeg gør men der er ikke noget iden når jeg bruger Request.Form
Avatar billede c-sharp Nybegynder
29. september 2006 - 10:22 #5
Nå men det med at få fat i alle parameterne i formen har jeg fået styr på:

Men mine special tegn (æøå) forsvinder stadig når jeg modtager parameterne...
Avatar billede c-sharp Nybegynder
29. september 2006 - 10:28 #6
I min adresselinie står der eks. Navn=%E5%E5%E5%E5 men jeg kan ikke få fat i de parameter fra min kode :-(
Avatar billede c-sharp Nybegynder
29. september 2006 - 10:39 #7
Hvis jeg så prøver at sende et parameter fra en aspx side på følgende måde:

Response.Redirect("http://localhost:2756/webformular/Default.aspx?navn=" + TextBox1.Text);

ser den samme tekst som evnestående ud som følger i min adresselinie:

navn=%c3%a5%c3%a5%c3%a5
Avatar billede coderdk Praktikant
29. september 2006 - 11:47 #8
Kig på System.Web.HttpUtility.UrlDecode
Avatar billede c-sharp Nybegynder
29. september 2006 - 12:01 #9
Den gør desværre ingen forskel
Avatar billede coderdk Praktikant
29. september 2006 - 12:16 #10
Den burde altså oversætte %c3%a5%c3%a5%c3%a5 til ååå:

string str = HttpUtility.UrlDecode( dinstr, Encoding.UTF8 );
Avatar billede c-sharp Nybegynder
29. september 2006 - 12:31 #11
Det er heller ikke problemet, for det er de parameter jeg får når jeg sender fra en aspx til en anden. Men når jeg submitter en form fra en html side skriver den følgende %E5%E5%E5%E5
Avatar billede coderdk Praktikant
29. september 2006 - 13:20 #12
Ja, det er det jeg mener - Det burde du kunne klare ved at køre den string du får fra siden igennem UrlDecode... Måske har jeg misforstået noget :)
Avatar billede c-sharp Nybegynder
29. september 2006 - 13:34 #13
Jeg får følgende parameter for værdien ååå via en html form: =E5%E5%E5

og følgende parameter for værdien ååå via min aspx side (se 29/09-2006 10:39:18): %c3%a5%c3%a5%c3%a5

Det sidste er der ingen problemer i at formatere med et er der i det første, of det er det jeg ska bruge :-(
Avatar billede coderdk Praktikant
29. september 2006 - 14:08 #14
Hmm sikker på der står =E5%E5%E5 og ikke %E5%E5%E5 ? Det ser fint ud, der kan du også bruge UrlDecode måske uden encoding, ellers er encodingen ISO88591
Avatar billede c-sharp Nybegynder
29. september 2006 - 16:51 #15
Kan du give et eksempel på det?
Avatar billede coderdk Praktikant
29. september 2006 - 18:12 #16
Er lidt rusten i ASP.NET, men er det ikke:

HttpContext htc = HttpContext.Current;
foreach (string str in htc.Request.Form)
{
  htc.Response.Write( HttpUtil.UrlDecode( str, Encoding.ASCII ) );
}

Og ved den anden med det dobbelte antal må de så være Encoding.UTF8 ?
Avatar billede c-sharp Nybegynder
29. september 2006 - 20:29 #17
Jeg tror ikke at det er der det går galt. Det er som om at den bare ikke henter de tegn, lige meget hvordan jeg decoder den querystring kommer der ingen special tegn, eller andre underlige tegn :-( skriver jeg eks. 1ååå1 udskriver den bare 11.
Avatar billede coderdk Praktikant
30. september 2006 - 00:09 #18
Ok, måske er der nogen andre der ved noget mere end jeg :)
Avatar billede arne_v Ekspert
30. september 2006 - 02:29 #19
de E5'ere antyder ligesom Encoding.Default !
Avatar billede c-sharp Nybegynder
30. september 2006 - 08:18 #20
Ja det virker også fint hvis jeg formatere en E5% direkte, men henter jeg den fra min Querystring er den væk, hvorfor?
Avatar billede c-sharp Nybegynder
02. oktober 2006 - 07:46 #21
Jeg har nu prøvet at lave det samme i alm. asp, det virker det fint :-/
Avatar billede c-sharp Nybegynder
02. oktober 2006 - 08:05 #22
Jeg har prøvet at hente hele url'en (Request.Url.AbsoluteUri.ToString();), når jeg gør det virker det får jeg også specialtegn med. Men jeg skulle gerne have det til at virke uden parameter i url'en (Jeg skal bruge method="POST" fra min form)
Avatar billede atke Nybegynder
02. oktober 2006 - 15:09 #23
Jeg ser ud til at sidde med same problem. Mit problem er at der UrlEncodes i en ClassicASP-side til ASCII, og jeg skal bruge værdien i en ASP.NET side som absolut vil decode med UTF-8 som tegnsæt. URLEncoding er forskellig alt efter tegnsæt.

Den eneste løsning jeg kan finde er at trække værdien ud af request.ServerVariables("QUERY_STRING") eller Request.Url.AbsoluteUri.ToString() som du foreslår. Lidt grimt, men...

Se selv med følgende kode:

Response.Write("RAW: " & "Rødblå blæk" & "<br />")
Response.Write("ASCII: " & System.Web.HttpUtility.UrlEncode("Rødblå blæk", System.Text.Encoding.ASCII) & "<br />")
Response.Write("UTF-8: " & System.Web.HttpUtility.UrlEncode("Rødblå blæk", System.Text.Encoding.UTF8) & "<br />")

Men du kan muligvis ændre din encoding, så den er i UTF-8
Avatar billede c-sharp Nybegynder
02. oktober 2006 - 15:17 #24
Jeg synes jeg har prøvet alle måder at encode og decode på men de special tegn er væk :-/

Jeg skule jo meget gerne bruge en løsning hvor man kan bruge POST metoden fra html-siden
Avatar billede atke Nybegynder
02. oktober 2006 - 18:32 #25
ASP.NET laver automatisk en URLDecode når den parser GET parametrene igennem, og skriver dem i Request.QueryString collection'en. Det er her dine æøå forsvinder, fordi asp.net bruger en anden encoding, end din webbrowser når den sender formen. De ukendte encodede chars bliver så bare ignoreret.

Så vidt jeg kan forstå har du to sider. Een med formen, og en anden der skal modtage POST requested. Er de begge i .net? Prøv at sætte ResponseEncoding="utf-8" i @page direktivet på begge to. Jeg tror nu stadig dit problem er at den ene side er ASCII, og den anden er utf-8.

Prøv at lave en test-side der sender POST til sig selv. Får du samme problem ?
Avatar billede c-sharp Nybegynder
02. oktober 2006 - 19:58 #26
den side som jeg afsender parameterne fra er en HTML side, den jeg modtager på er en asp.net side. Sender jeg fra en asp.net side virker det fint.
Avatar billede coderdk Praktikant
02. oktober 2006 - 20:19 #27
Prøv at ændre HTML-formen til:

<form method="POST" action="http:www.test.dk/sendmail.aspx" accept-charset="UTF-8"  acceptcharset="UTF-8">
Avatar billede c-sharp Nybegynder
02. oktober 2006 - 20:50 #28
Det hjalp desværre heller ikke.
Avatar billede atke Nybegynder
02. oktober 2006 - 21:31 #29
Hvad med at tilføje følgende til din head på html-siden:

<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8">

form accept-charset er vist desværre ikke implementeret i nogen browsere

I text-editorer kan man sjældent vælge om man vil gemme sin fil i ASCII eller utf-8. De bliver som regel gemt i den encoding de blev åbnet i. Det kan derfor være at du kan gemme outputtet fra din aspx-side, som er utf-8. Du kan så copy/paste indholdet fra din html-source ind i din nye utf-8 fil, og med lidt held er den nu utf-8. Med endnu mere held kommer den også ud af webserveren som utf-8 og formen i browseren returnerer så i utf-8.
Avatar billede c-sharp Nybegynder
03. oktober 2006 - 07:57 #30
atke: Det afhjalp problemet, nu er problemet bare at jeg ikke er så pjattet med at der skal tilføjes noget i headeren på HTML side, ja jeg er vansklig :-)

Er der nogen andre forslag?
Avatar billede coderdk Praktikant
03. oktober 2006 - 09:38 #31
Hvorfor er du ikke det? Der bør ALTID være en doctype og en angivelse af content-type/charset...
Avatar billede c-sharp Nybegynder
03. oktober 2006 - 09:51 #32
Det et mail-script der skal bruges til et webhotel så det skal gerne være så simplet at implemeneter som muligt. Alle andre mail-script jeg har set kræver heller ikke at man skal angive noget i headeren.
Avatar billede coderdk Praktikant
03. oktober 2006 - 10:10 #33
Jeg gentager lige mig selv: Man bør *altid* have en DOCTYPE og en Content-Type-angivelse på *alle* sine sider. Man kan til nøds undvære DOCTYPE (så går browserne i quirks-mode), men content-type bør altid sættes.

Hvordan besværliggør en indsættelse af <meta http-equiv="Content-type" content="text/html; charset=utf-8"> mellem <head> og </head> implementeringen? Hvis den ikke er der, er det sjusk - Ganske simpelt :)
Som et plus, gør den også at ÆØÅ vises korrekt for alle brugere ;P
Avatar billede c-sharp Nybegynder
03. oktober 2006 - 10:35 #34
coderdk: ja du har nok rat!

I skal alle have mange tak for hjælpen!

Jeg vil forslå at vi afregner på følgende måde:

atke: 30 point
coderdk: 10 point

Er det ok med jer?
Avatar billede coderdk Praktikant
03. oktober 2006 - 10:48 #35
10 er mere end nok til mig :) Det var trods alt atke der kom med den korrekte løsning! :-)

Smid et svar atke!
Avatar billede atke Nybegynder
04. oktober 2006 - 07:21 #36
:)
Avatar billede c-sharp Nybegynder
05. oktober 2006 - 13:20 #37
Den er ikke helt død endnu den her :-/

De fleste af den der bruger min mail form har følgende charterset i headeren:
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">

og med det charterset forsvinder æøå...
Avatar billede atke Nybegynder
05. oktober 2006 - 19:21 #38
Du siger selv at du kan finde æøå som ASCII UrlEncoded i Request.Url.AbsoluteUri.ToString(). Jeg foreslår at du manuelt parser den og decoder selv. Noget i stil med:

string[] QSArr = Request.Url.AbsoluteUri.ToString().Split("&")
System.Collections.Specialized.NameValueCollection myQueryString = new System.Collections.Specialized.NameValueCollection();
for(int i=0; i<QSArr.length; i++)
{
  string[] oneArg = QSArr[i].Split("=");
  myQueryString.Add(oneArg[0], System.Web.HttpUtility.UrlDecode(oneArg[1], System.Text.Encoding.GetEncoding("ISO-8859-1"))
}

Jeg ved dog ikke hvordan du finder ud af om formen er sendt i ASCII eller utf-8. Hvis du ville have værdierne fra POST, må der være en tilsvarende rå version af postdata et sted.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester