极念网欢迎您!
asp.net javascript处理url参数乱码的解决方法
作者:翅膀的初衷来源:本站原创发布时间:2014/4/9 1:11:13查看数:60834

  在Web开发当中,Url传参是一件十分常见的事情,但是如果参数中包含有汉字的话,出现乱码也是十分常见的事情!

  常规情况下只要保证以下情况,就可以避免参数乱码:

  1.保持文件编码一致!
    这个一致,又体现在二个方面:
    1) 所有文件的编码一致:做为一个Web开发者,代码文件(aspx,html,cs等),样式文件(css),脚本文件(js)编码要尽量统一!
    2) 文档申明与文件保存编码一致:比如<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>,文档已经申明了是UTF-8,但是实际上这个申明与文件保存编码是没有任何关系的,不过正常情况下,大多数IDE(比如DW)会根据申明自动保存为正确的编码,但是不排除少见的一些IDE甚至直接就是记事本及异常导致的编码不一致的情况!

  2.特殊字符做好编码!

  而在编码过程中,asp.net后端编码一般使用HttpUtility.UrlEncode进行编码,而JS则使用escape,如果尝试使用js的unescape去解码UrlEncode处理的字符串是无法成功的——结果是另外一串乱码!
  这是由于二者的处理机制不一样,escape 是将字符串转换为 Unicode 字符串。如果在后端编码需要前端JS解码的话,可以用HttpUtility.UrlEncodeUnicode替代HttpUtility.UrlEncode(注:escape或者HttpUtility.UrlEncodeUnicode编码的参数,在asp.net后台通过Request.QueryString取参时,可以自动解码,无法额外处理)

  另外由于HttpUtility.UrlEncodeUnicode是被否决的方法,下面列出具体的该方法的实现代码供大家参考:

 

public  string  UrlEncodeUnicode(string  value,  bool  ignoreAscii)

{
if (value == null)
{
return null;
}
int length = value.Length;
StringBuilder builder
= new StringBuilder(length);
for (int i = 0; i < length; i++)
{
char ch = value[i];
if ((ch & 0xff80) == 0)
{
if (ignoreAscii || IsUrlSafeChar(ch))
{
builder.Append(ch);
}
else if (ch == ' ')
{
builder.Append(
'+');
}
else
{
builder.Append(
'%');
builder.Append(IntToHex((ch
>> 4) & '\x000f'));
builder.Append(IntToHex(ch
& '\x000f'));
}
}
else
{
builder.Append(
"%u");
builder.Append(IntToHex((ch
>> 12) & '\x000f'));
builder.Append(IntToHex((ch
>> 8) & '\x000f'));
builder.Append(IntToHex((ch
>> 4) & '\x000f'));
builder.Append(IntToHex(ch
& '\x000f'));
}
}
return builder.ToString();
}

public char IntToHex(int n)
{
if (n <= 9)
{
return (char) (n + 0x30);
}
return (char) ((n - 10) + 0x61);
}

public bool IsUrlSafeChar(char ch)
{
if ((((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z'))) || ((ch >= '0') && (ch <= '9')))
{
return true;
}
switch (ch)
{
case '(':
case ')':
case '*':
case '-':
case '.':
case '_':
case '!':
return true;
}
return false;
}

 

原创作品,转载请注明作者与出处

作者:翅膀的初衷

来源:http://www.jiniannet.com