|
|
 |
RE: FN-FORUM: IIS changes escaped characters in URL... HELP!!!
date posted 31st January 2004 16:35
If anyone was intrigued by this problem, I have now solved it. The
characters were not being translated to %3F's, it's just that %3F's were
being used to display characters it couldn't display properly.
As I was creating a URL to use with 'window.open' I was using the
javascript command "escape" to handle the extended characters. That was
mistake number 1. Since Internet Explorer 5.5 (and NS/Moz 6) the command
"encodeURIComponent" should be used instead because in the words of
Microsoft: "escape doesn't always work properly with Unicode characters"...
Nice!
Changing the URL encoding to use the new function to encode using
codepage: UTF-8, and setting a processing directive in my (ColdFusionMX)
receiving page to decode using UTF-8 has cured the problem. I believe there
are similar "processing directive" type commands in both ASP and PHP to
achieve the same result.
It seems it only worked on my development system because it was all
using the same codepage anyway, but only by default.
If anyone is interested, below is a javascript function (found on
the web and then slightly modified by me) that will UTF-8 encode strings to
put in a URL that works on browsers that have the encodeURIComponent command
in Javascript by using that command, and also older browsers that don't by
using a replacement routine. Call the function using:
encodedString = utfEscape(originalString);
Cheers,
Dave.
//****************** start of snippet **************
/* ***************************
** Most of this code was kindly
** provided to me by
** Andrew Clover (and at doxdesk dot com)
** http://and.doxdesk.com/
** in response to my plea in my blog at
** http://worldtimzone.com/blog/date/2002/09/24
** It was unclear whether he created it.
*/
function utf8(wide) {
var c, s;
var enc = "";
var i = 0;
while(i=0xDC00 && c=0xD800 && c=wide.length) continue;
s= wide.charCodeAt(i++);
if (s=0xDE00) continue;
c= ((c-0xD800)>6&0x3F),0x80+(c&0x3F));
else enc +=
String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&
0x3F));
}
return enc;
}
var hexchars = "0123456789ABCDEF";
function toHex(n) {
return hexchars.charAt(n>>4)+hexchars.charAt(n & 0xF);
}
var okURIchars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
function encodeURIComponentNew(s) {
var s = utf8(s);
var c;
var enc = "";
for (var i= 0; i |
 |
|