Special Characters in Query String

S

SMG

Hi All,
I have created an application which is working fine and is in about to
launch, now suddenly my mgmt says there are chances that Scrip ID( a
particular id and not prim key) may have special characters like '&,*,),( or
/'

This data(field/key) I am passing this value as a querystring. e.g.

value to be passed : ABC
http://localhost/myProj/abc.aspx?ScripID=ABC
this works fine,

But when I have special characters like [ABC&D] then the value retrieved is
wrong it just retrieves ABC and not complete ID [ABC&D]
value to be passed : ABC&D
http://localhost/myProj/abc.aspx?ScripID=ABC&D

how do I overcome this, I know I can do it like we have %20 for space and
like wise for & there will be something, but this will be a major change to
my application, can I do this at one end some where in web.config or in aspx
page?

Regards,
Shailesh Gajare
 
K

Kim Bach Petersen

SMG said:
But when I have special characters like [ABC&D] then the value retrieved is
wrong it just retrieves ABC and not complete ID [ABC&D]
value to be passed : ABC&D
http://localhost/myProj/abc.aspx?ScripID=ABC&D

how do I overcome this, I know I can do it like we have %20 for space and
like wise for & there will be something, but this will be a major change to
my application, can I do this at one end some where in web.config or in aspx
page?

You have to UrlEncode the string you are passing as a querystring:

strQuery = HttpUtility.UrlEncode(strQuery, System.Text.Encoding.Default)

Kim :eek:)
 
J

Joerg Jooss

Kim said:
SMG said:
But when I have special characters like [ABC&D] then the value
retrieved is wrong it just retrieves ABC and not complete ID [ABC&D]
value to be passed : ABC&D
http://localhost/myProj/abc.aspx?ScripID=ABC&D

how do I overcome this, I know I can do it like we have %20 for
space and like wise for & there will be something, but this will be
a major change to my application, can I do this at one end some
where in web.config or in aspx page?

You have to UrlEncode the string you are passing as a querystring:

strQuery = HttpUtility.UrlEncode(strQuery,
System.Text.Encoding.Default)

I suggest using a more web-friendly encoding than some Windows specific
default, e.g. ISO-8859-1 or UTF-8.

Cheers,
 
K

Kim Bach Petersen

Joerg said:
I suggest using a more web-friendly encoding than some Windows specific
default, e.g. ISO-8859-1 or UTF-8.

Obviously UTF-8 is to be preferred and in most cases this is the actual
default value returned by System.Text.Encoding.Default.

Still, in my experience, one needs to use the default rather than
explicitly choosing UTF-8 if the application is to run on _any_ webhotel
without encountering encoding mismatch problems, at least with querystrings.

Kim :eek:)
 
J

Joerg Jooss

Kim said:
Obviously UTF-8 is to be preferred and in most cases this is the
actual default value returned by System.Text.Encoding.Default.

Still, in my experience, one needs to use the default rather than
explicitly choosing UTF-8 if the application is to run on any
webhotel without encountering encoding mismatch problems, at least
with querystrings.

You're confusing the need to use Windows-1252 with the need to use
Encoding.Default.

For Western European and US Windows OSs Encoding.Default will be an
instance of Windows-1252, but for other configurations it won't.
Relying on platform or installation dependent default values impairs
your application's portability.

Cheers,
 
J

Joerg Jooss

Juan said:
re:

Why ?

Globalization -- assuming you serve mostly content based on Western
European languages but don't want to get stuck with any 8 bit encodings
like ISO-8859-x.

Cheers,
 
J

Juan T. Llibre

re:
assuming you serve mostly content based on Western European languages

That's a mighty big assumption to make, don't you think ?

Even so, using UTF-8, I haven't found a way
to display characters in the high-ascii 128-255 range,
which several Western European languages require.

I've been able to do that by using iso-8859-1.

Can you post a sample, using utf-8,
which displays characters in the high-ascii 128-255 range ?

I'd be a bit more liable to believe you if you did.

Specifically, if you could show me how to display the
characters ñ, Ñ, ¡, ¿, á, é, í, ó, and ú with utf-8, I'd be grateful.
 
J

Joerg Jooss

Juan said:
re:

That's a mighty big assumption to make, don't you think ?

No, not all. It just doesn't make sense to use UTF-8 from a bandwidth
perspective once you need to serve a lot of content in on other
languages or scripts, as one character may require up to six bytes.
Even so, using UTF-8, I haven't found a way
to display characters in the high-ascii 128-255 range,
which several Western European languages require.

Then you've been doing something wrong. Let me quote the Unicode
standard document:

"The Unicode Standard provides 1,114,112 code points, most of which are
available for encoding of characters. The majority of the common
characters used in the major languages of the world are encoded in the
first 65,536 code points, also known as the Basic Multilingual Plane
(BMP). The overall capacity for more than a million characters is more
than sufficient for all known character encoding requirements,
including full coverage of all minority and historic scripts of the
world."

There's no civilized 8 bit encoding that cannot be replaced by Unicode
;-)
I've been able to do that by using iso-8859-1.

If you can display your characters with ISO-8859-1, you have
accidentally or willingly switched the response encoding.
Can you post a sample, using utf-8,
which displays characters in the high-ascii 128-255 range ?

Let's avoid the errors of the past -- there's no such thing as Hi ASCII
or 8 bit ASCII. US-ASCII and all its localized clones (ISO-646-xx) are
7 bit. ISO-8859-x, Windows-125x are built "on top of" US-ASCII.

If you want to see UTF-8 in real live, feel free to visit my homepage
which is running dasBlog and serves content in UTF-8.
I'd be a bit more liable to believe you if you did.

Specifically, if you could show me how to display the
characters ñ, Ñ, ¡, ¿, á, é, í, ó, and ú with utf-8, I'd be grateful.

OK, do the following:

1. Create a new WebForm in a new ASP.NET project. Make sure that your
web.config's <globalization/> looks like this:
<globalization
requestEncoding="utf-8"
responseEncoding="utf-8" />

2. Add a Label control to the WebForm, call it "label" and set its text
in the property control to the empty string.

3. Implement the Page_Load method like this:
this.label.Text = "ñ, Ñ, ¡, ¿, á, é, í, ó, and ú";

4. Run the WebForm -- it should display the text given above.

And that's pretty much it.

See, once you have the characters in a string object and the page is
not rendered correctly, one of the following errors may have occurred:

-- Your browser is configured to use a fixed encoding, which does not
match andf is not compatible with the real encoding (like ISO-8859-1
vs. UTF-8 for non-ASCII content). This will lead to weird or missing
characters in web pages (responses).

-- Neither the HTTP response nor the HTML source specify the character
encoding. In that case, the browser must guess, and of course it can
guess wrong. This should never happen with any decent web application
technology. ASP.NET for example sends a proper
Content-Type: text/html; charset=utf-8
HTTP header.

Then there's the case that you have a build-time error. In the example
given above, I've hardcoded the string in my source file. The ASP.NET
page processor needs to know the source file's encoding to decode these
characters correctly -- that's what the fileEncoding attribute of the
<globalization/> element does. If you'd changed that attribute to an
incompatible one or one that cannot represent a given character, that
particular character would be already missing in the resulting string
object. This isn't usually a problem as display text belongs into
satellite assemblies anyway, but for simple applications this needs to
be kept in mind.

I hope this helps.

Cheers,
 
J

Juan T. Llibre

Hi, Joerg.

Take a look at the result :
http://asp.net.do/test/utf-8.aspx
( Browsing it with IE6 set to use utf-8 results in the same.)

Now, look at the same code, using iso-8859-1 :
http://asp.net.do/test3/iso-8859-1.aspx
( Browsing with IE6 set to "Auto-select",
results in Western European getting selected.)

I've had numerous problems with utf-8, all of which result
in common characters in spanish not geting displayed.

Using iso-8859-1 gets rid of the problems.
 
J

Joerg Jooss

Juan said:
Hi, Joerg.

Take a look at the result :
http://asp.net.do/test/utf-8.aspx
( Browsing it with IE6 set to use utf-8 results in the same.)

Now, look at the same code, using iso-8859-1 :
http://asp.net.do/test3/iso-8859-1.aspx
( Browsing with IE6 set to "Auto-select",
results in Western European getting selected.)

I've had numerous problems with utf-8, all of which result
in common characters in spanish not geting displayed.

Using iso-8859-1 gets rid of the problems.

I'm pretty sure that your source file's encoding is incorrect, because
in the UTF-8 version, the characters aren't even contained in the HTTP
response; the Content-Length is significantly less as well.

I also wouldn't be using XHTML for an encoding test, because a 10
minute experiment shows that both Firefox and IE aren't up to the task,
yet (or I did something very stupid).

Feel free to send me your project files and I'll investigate.

Cheers,
 
J

Juan T. Llibre

I'll send you both file/web.config sets.
They are identical except for the file encoding.
 
S

SMG

I am waiting for you......

I'll send you both file/web.config sets.
They are identical except for the file encoding.
 
J

Juan T. Llibre

I mailed them last night at 7 to joergjooss.de ( the news-reply alias ).

I haven't received a notice of refusal or problem.

Check your spam strap and/or attachment filter
and let me know if I should resend to the same
or to a different address.






SMG said:
I am waiting for you......

I'll send you both file/web.config sets.
They are identical except for the file encoding.
 
J

Juan T. Llibre

Sorry for the previous message.

SMG, if you think I will individually mail sets of files
to everybody who reads this newsgroup, especially
someone with a fake address, either you're nuts,
or your sense of humor is rusty.

Thanks for wasting my time.





SMG said:
I am waiting for you......

I'll send you both file/web.config sets.
They are identical except for the file encoding.
 
J

Joerg Jooss

Juan said:
I mailed them last night at 7 to joergjooss.de ( the news-reply alias
).

Note that do I have a real job and am not being paid by MS for one hour
response times ;-) ;-)

I'll reply by mail, and we'll post the solution once we're there.

Cheers,
 
J

Juan T. Llibre

heh, heh...

I actually was posting to somebody else's
idea of a joke, by mistake, and not to you.

I'll be looking forward to getting this puzzle solved.

;-)
 
J

Joerg Jooss

Juan said:
heh, heh...

I actually was posting to somebody else's
idea of a joke, by mistake, and not to you.

Sure, but I still felt inclined to respond ;-)

Mail has been sent.

Cheers,
 
S

SMG

Na m Not,
I thot you will post the solution over here..my thinking is going mad...
Anyways, you can mail me solution at (e-mail address removed)
thanks... I need solution urgently, please send it ASAP :)


when going gets tough, Tough gets going...... :)
Shailesh G



Sorry for the previous message.

SMG, if you think I will individually mail sets of files
to everybody who reads this newsgroup, especially
someone with a fake address, either you're nuts,
or your sense of humor is rusty.

Thanks for wasting my time.





SMG said:
I am waiting for you......

I'll send you both file/web.config sets.
They are identical except for the file encoding.
 
J

Juan T. Llibre

Joerg and I are working on a solution offline.

We are very close to a solution right now.
As soon as we have one, we'll post it here.





SMG said:
Na m Not,
I thot you will post the solution over here..my thinking is going mad...
Anyways, you can mail me solution at (e-mail address removed)
thanks... I need solution urgently, please send it ASAP :)


when going gets tough, Tough gets going...... :)
Shailesh G



Sorry for the previous message.

SMG, if you think I will individually mail sets of files
to everybody who reads this newsgroup, especially
someone with a fake address, either you're nuts,
or your sense of humor is rusty.

Thanks for wasting my time.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,982
Messages
2,570,186
Members
46,742
Latest member
AshliMayer

Latest Threads

Top