Avatar billede hedemann Nybegynder
31. august 2009 - 15:04 Der er 12 kommentarer

Decoding af URL string

Jeg har en web applikation der modtager værdier via en url string, f.eks "hjemmeside.apsx?text=m%F8bler" - der står møbler :-)

Mit problem er at jeg gerne vil have værdien møbler over i en VB string variable - skulle være simpel, men nej (ikek for mig).

Hvis jeg bruger "txtText = Request.QueryString("Text")" indeholder variablen txtText værdien m(firkant)bler og ikke møbler.  Bruger jeg "txtUrl = Request.RawUrl.ToString()" indeholder variablen txtUrl værdien " hjemmeside.apsx?text=m%F8bler" - så jeg vil gerne have konverteret %F8 til et ø.

Har prøvet med " txtText = system.Web.HttpUtility.UrlDecode(Request.QueryString("Text"))" men det virker ikke - txtText indeholder stadig en firkant.

Er der nogle der har en ide??
Avatar billede hedemann Nybegynder
31. august 2009 - 15:04 #1
Ups fik ikke fortalt at der er tale om VB.Net
Avatar billede arne_v Ekspert
31. august 2009 - 15:12 #2
HttpUtility.UrlDecode virker nok hvis du angiver korrekt Encoding og tester med noget som kan vise danske bogstaver.
Avatar billede hedemann Nybegynder
31. august 2009 - 15:19 #3
Den url jeg modtager er kodet med iso-8859-1. Hvad skal der så bruges til at decode med - ved du det?

Jeg er ikke helt sikker på at jeg forstår det sidste du skriver - beklager.
Avatar billede arne_v Ekspert
31. august 2009 - 15:26 #4
Proev med Encoding.GetEncoding(1252).
Avatar billede hedemann Nybegynder
31. august 2009 - 15:34 #5
jeg går ud fra at de 1252 skal benyttes således: txtText = System.Web.HttpUtility.UrlDecode(Request.QueryString("Text"), Encoding.GetEncoding(1252)) og hvis det er tilfældet så ændre det ikke på noget.
Avatar billede arne_v Ekspert
31. august 2009 - 16:41 #6
Ja.

Saa har jeg en meget staerk mistanke om at koden faktisk virker men at det er der hvor du checker om den virker at den bliver garblet op.
Avatar billede hedemann Nybegynder
31. august 2009 - 21:36 #7
koden ser sådanne ud:

        Dim txtText As String
        Dim txtUrl As String

        txtUrl = Request.RawUrl.ToString()

        If Request.Params("Text") Is Nothing Then
            txtText = "Tom"
        Else
            txtText = System.Web.HttpUtility.UrlDecode(Request.QueryString("Text"), Encoding.GetEncoding(1252))
        End If

og så gemmes txtText i en MS-SQL tabel i et nvarchar felt
Avatar billede arne_v Ekspert
01. september 2009 - 03:25 #8
Jeg tror stadig at problemet opstår efter den kode du viser.

Prøv og udskriv den på siden.
Avatar billede hedemann Nybegynder
01. september 2009 - 08:57 #9
Det er ikke det store program (lille testapp.) - udover at det stykke kode der er i forrige kommentar, så benyttes
"sqlDB.insertSMSReceive(txtText, txtUrl)" der kalder en SP der skriver de to værdier i en tabel. Feltet txtText er defineret som en string og som en nvarchar() i tabellen.

Men faktisk så tror jeg ikke at det har noget med databasen at gøre. Hvis jeg sidder i VS2008 og debugger, kan jeg heller ikke se specialtegne i txtTekst, men det kan jeg i txtUrl der indeholder den rå Url.
Avatar billede arne_v Ekspert
02. september 2009 - 02:41 #10
Du kan checke hvad følgende giver:

Imports System.Text
Imports System.Web
Imports System.Windows.Forms

Module Program
    Sub Main()
        Dim s As String = "m%F8bler"
        Dim s2 As String = HttpUtility.UrlDecode(s, Encoding.GetEncoding(1252))
        MessageBox.Show(s2)
    End Sub
End Module
Avatar billede arne_v Ekspert
02. september 2009 - 02:42 #11
Prøv også evt. med:

txtText = System.Web.HttpUtility.UrlDecode(Request.RawUrl.ToString(), Encoding.GetEncoding(1252))
Avatar billede hedemann Nybegynder
02. september 2009 - 14:18 #12
Fandt ud af det, indsatte flg i web.config

<globalization requestEncoding="iso-8859-1" responseEncoding="iso-8859-1" culture="da-DK" uiCulture="da-DK"/>

Så hjalp det. Og som bonus så bliver Request.QueryString("Text") konverteret uden at jeg behøver UrlDecode feltet.
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
Kurser inden for grundlæggende programmering

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