url传递中文的解决方案总结

1 .设置web.config文件。
< system.web >  
 
< globalization requestEncoding = " gb2312 "  responseEncoding = " gb2312 "  culture = " zh-CN "  fileEncoding = " gb2312 "   />  
 
</ system.web >  
 
或者:
aspx文件中:
< meta http - equiv = " Content-Type "  content = " text/html; charset=gb2312 " >

2 .传递中文之前,将要传递的中文参数进行编码,在接收时再进行解码。 
>>  进行传递 
string  Name  =   " 中文参数 "
Response.Redirect(
" B.aspx?Name= " + Server.UrlEncode(Name)); 

>>  进行接收 
string  Name  =  Request.QueryString[ " Name " ]; 
Response.Write(Server.UrlDecode(Name)); 
或者:
 
NavigateURL
= ' <%# "WebForm2.aspx?Singer=" + HttpUtility.UrlEncode("中国人", System.Text.Encoding.GetEncoding("GB2312")) %> '


3 .如果是从 .HTML 文件向 .Aspx 文件进行传递中文参数的话(即不从后台用 Redirect()方法进行 Url 转换)。一样要将传递的中文参数进行编码,在接收时再进行解码。 
>>  进行传递 
< script language = " JavaScript " >  
function GoUrl() 

var Name 
=   " 中文参数 "
location.href 
=   " B.aspx?Name= " + escape(Name); 

</ script >  
< body onclick = " GoUrl() " >  
>>  进行接收 
string  Name  =  Request.QueryString[ " Name " ]; 
Response.Write(Server.UrlDecode(Name)); 

一般来说。设置web.config文件就可以了。但是如果你用 JavaScript 调用 webservice 方法的话(往webservice里面传递中文参数)。设置 web.config 文件好象无效。 

————————————————————
在html中实现编解码:

< script language = " javascript " >
function openUrl(src)
{
  var strUrl
= escape(src);
  window.open(strUrl);
}
 

function change_url(src)
{
 document.location.href
= escape(src);
}
 
</ script >   
 
在新窗口保存
< a href = ' javascript:openUrl("css/合同.doc"); '   > 交合同 </ a >
 
 
当前位置保存,无闪烁。
< a href = " # "  onclick = BLOCKED SCRIPTchange_url( " css/合同.doc " ) > 合同 </ a >
 
注意:路径中的斜线是:“
/ ”,而不是“\”,否则也不行啊。
 
 
 
 
----------------------------------------
前一阵遇到在做.net Web开发时,碰到一个很奇怪的问题,就是Url中,如果将中文字符作为参数值传递时,QueryString得到的值可能会出错。简单的说,比如下面这个Url:
UrlParmTest.aspx
? parm1 = 中国 & parm2 = 中国人
在Request.QueryString时,parm1和parm2得到都是
" 中国 " ,显然出现了问题,可是在某些情况下却是正常的。

如果请求不是直接通过url,而使用response.redirect在服务器端操作,没有遇到过类似的问题。

当时我想中文是双字节编码,可能传递的时候就是有不确定性,还是用英文好。

可是为什么在server端redirect就是正常的,问题在哪里呢?

昨天我询问在gtec的同学,才大概明白了一些:
如果在.cs文件中设置中文参数,请在中文参数外使用Server.UrlEncode(
" 中文 " )对中文进行Encode
如果在.aspx文件中设置,请使用
<%= Server.UrlEncode( " 中文 " ) %> 进行Encode
在QueryString时,不用再进行Decode,可以获得正常的中文字符串

下面是同学给出的一些解释:
UrlEncode把一些多字节字符转换成url里允许的单字节字符,本来浏览器就会自动做的,但是目前确实存在一些问题,所以自己再Encode一下,在接受端会自动对Url进行Decode。

我想Response.Redirect可能可以确保作Encode的工作,所以没有问题。

你可能感兴趣的:(解决方案)