首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

url传递汉字参数有关问题,难住了!大家帮忙

2012-02-07 
url传递汉字参数问题,难住了!大家帮忙。比如我们在百度搜索关键字,会转入下列页面:http://www.baidu.com/s?

url传递汉字参数问题,难住了!大家帮忙。
比如我们在百度搜索关键字,会转入下列页面:
http://www.baidu.com/s?lm=0&si=&rn=10&ie=gb2312&ct=0&wd=%BA%AB%B9%FA%D3%EF%D1%A7%CF%B0%D7%CA%C1%CF&pn=10&cl=3&f=1
请问   %BA%AB%B9%FA%D3%EF%D1%A7%CF%B0%D7%CA%C1%CF   这段字符用c#怎么实现,然后怎么接收这个参数。
注意是两个问题:1如何转成串;2如何转回去。

谢谢大家,参与者都有份。

[解决办法]
帮顶
[解决办法]
Server.UrlEncode 和 Server.UrlDecode
[解决办法]
Server.UrlEncode
Server.UrlDecode

[解决办法]
HttpUtility.UrlEncode
[解决办法]
js:
var fileName = "../inc/selectMultipleVendor.aspx?supplierCode= "+escape(supplierList);
var sReturn = window.showModalDialog(fileName,window, "dialogHeight:700px;dialogWidth:800px;status:no;help:no;edge: Raised; ");
[解决办法]
Server.UrlEncode
Server.UrlDecode
可能自己还定义了个转换字符串的算法
[解决办法]
System.Web.HttpUtility.UrlDecode;
对要传递的参数进行解密。
System.Web.HttpUtility.UrlEncode;
对要传递的参数进行加密。
[解决办法]
.....
[解决办法]
Server.UrlEncode Server.UrlDecode
[解决办法]
Server.UrlEncode Server.UrlDecode
或是
HttpUtility.UrlEncode HttpUtility.UrlDecode

[解决办法]
用这个把汉字进行URL编码 Server.UrlEncode
用这个解码 Server.UrlDecode
你看到的那种情况主要是 汉字如果不编码用url传过去会是乱码,
所以进行编码,
[解决办法]
System.Web.HttpUtility.UrlDecode;
对要传递的参数进行解密。
System.Web.HttpUtility.UrlEncode;
对要传递的参数进行加密。


原理是:取汉字的2字节的unicode码,按字节(0-255)取16进制,加%。
因为unicode是国际化的,所以唯一确定,解码时执行相反的操作

[解决办法]
楼上各位说得都不对。百度的URL Encode处理不是Server.UrlDecode()就可以简单还原的。
[解决办法]
1: <form action= "post ">
Response.Redirect( "http://www.baidu.com/s?lm=0&si=&rn=10&ie=gb2312&ct=0&wd=中文汉字&pn=10&cl=3&f=1 ");
2.Request.QueryString[ "wd "] //直接接收
[解决办法]
参与者都有份
[解决办法]
下面先来看两个函数,UTF16转UTF8和UTF8转Utf16的。
function utf16to8(str) {
var out, i, len, c;

out = " ";
len = str.length;
for(i = 0; i < len; i++) {
c = str.charCodeAt(i);
if ((c > = 0x0001) && (c <= 0x007F)) {
out += str.charAt(i);
} else if (c > 0x07FF) {
out += String.fromCharCode(0xE0 | ((c > > 12) & 0x0F));
out += String.fromCharCode(0x80 | ((c > > 6) & 0x3F));
out += String.fromCharCode(0x80 | ((c > > 0) & 0x3F));
} else {
out += String.fromCharCode(0xC0 | ((c > > 6) & 0x1F));


out += String.fromCharCode(0x80 | ((c > > 0) & 0x3F));
}
}
return out;
}

function utf8to16(str) {
var out, i, len, c;
var char2, char3;

out = " ";
len = str.length;
i = 0;
while(i < len) {
c = str.charCodeAt(i++);
switch(c > > 4)
{
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
// 0xxxxxxx
out += str.charAt(i-1);
break;
case 12: case 13:
// 110x xxxx 10xx xxxx
char2 = str.charCodeAt(i++);
out += String.fromCharCode(((c & 0x1F) < < 6) | (char2 & 0x3F));
break;
case 14:
// 1110 xxxx 10xx xxxx 10xx xxxx
char2 = str.charCodeAt(i++);
char3 = str.charCodeAt(i++);
out += String.fromCharCode(((c & 0x0F) < < 12) |
((char2 & 0x3F) < < 6) |
((char3 & 0x3F) < < 0));
break;
}
}

return out;
}

那么为什么需要进行转化呢?因为在JavaScript中获得的中文字符是用UTF16进行编码的,和我们统一的页面标准格式UTF-8可不一样哦,所以需要先进行转化,上面的函数UTF-16到UTF8,然后再进行Base64的编码。

下面是关于Js进行Base64编码和解码的相关操作:

var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ ";
var base64DecodeChars = new Array(
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
//客户端Base64编码
function base64encode(str) {
var out, i, len;
var c1, c2, c3;

len = str.length;
i = 0;
out = " ";
while(i < len) {
c1 = str.charCodeAt(i++) & 0xff;
if(i == len)
{
out += base64EncodeChars.charAt(c1 > > 2);
out += base64EncodeChars.charAt((c1 & 0x3) < < 4);
out += "== ";
break;
}
c2 = str.charCodeAt(i++);
if(i == len)
{
out += base64EncodeChars.charAt(c1 > > 2);
out += base64EncodeChars.charAt(((c1 & 0x3) < < 4) | ((c2 & 0xF0) > > 4));
out += base64EncodeChars.charAt((c2 & 0xF) < < 2);
out += "= ";
break;
}
c3 = str.charCodeAt(i++);
out += base64EncodeChars.charAt(c1 > > 2);
out += base64EncodeChars.charAt(((c1 & 0x3) < < 4) | ((c2 & 0xF0) > > 4));
out += base64EncodeChars.charAt(((c2 & 0xF) < < 2) | ((c3 & 0xC0) > > 6));
out += base64EncodeChars.charAt(c3 & 0x3F);
}
return out;
}
//客户端Base64解码
function base64decode(str) {
var c1, c2, c3, c4;
var i, len, out;

len = str.length;
i = 0;
out = " ";
while(i < len) {
/* c1 */
do {
c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
} while(i < len && c1 == -1);
if(c1 == -1)
break;

/* c2 */
do {
c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
} while(i < len && c2 == -1);
if(c2 == -1)
break;

out += String.fromCharCode((c1 < < 2) | ((c2 & 0x30) > > 4));



/* c3 */
do {
c3 = str.charCodeAt(i++) & 0xff;
if(c3 == 61)
return out;
c3 = base64DecodeChars[c3];
} while(i < len && c3 == -1);
if(c3 == -1)
break;

out += String.fromCharCode(((c2 & 0XF) < < 4) | ((c3 & 0x3C) > > 2));

/* c4 */
do {
c4 = str.charCodeAt(i++) & 0xff;
if(c4 == 61)
return out;
c4 = base64DecodeChars[c4];
} while(i < len && c4 == -1);
if(c4 == -1)
break;
out += String.fromCharCode(((c3 & 0x03) < < 6) | c4);
}
return out;
}

这样传递过去的值就可以在服务器端解码操作了。


[解决办法]
把WebConfig里面改成Gb2312就可以用Request.QueryString直接使用了
[解决办法]
Server.UrlEncode
[解决办法]
其实也可以用系统
Server.UrlEncode
Server.UrlDecode
但另一种方法
自己写个加密函数.对传过去时进行加密.然后在接收的时候再解密.
[解决办法]
Server.UrlEncode 和 Server.UrlDecode
[解决办法]
咱这么多!!传递用:UrlEncode( "参数库 ")接受就用page.request( "参数名 ").Tostring()就行了!
[解决办法]
这么多人啊
那就只参与一下吧 呵呵
[解决办法]
解决了吧?
[解决办法]
编码:
Server.UrlEncode();
解码:
Server.UrlDecode();
[解决办法]
编码:
Server.UrlEncode();
解码:
Server.UrlDecode();

[解决办法]
Server.UrlEncode,接收页面不用解码,自动的
[解决办法]
string wd = Server.UrlDecode(Request.QueryString[ "wd "]);

Response.Redirect( "?wd= " + Server.UrlEncode( "我是中国人 "));
[解决办法]
Server.UrlEncode
Server.UrlDecode
[解决办法]
HttpUtility.UrlEncode(value)
结果还和页面编码有关
[解决办法]
参与参与,学习学习
[解决办法]
System.Web.HttpUtility.UrlDecode;
对要传递的参数进行解密。
System.Web.HttpUtility.UrlEncode;
对要传递的参数进行加密。


原理是:取汉字的2字节的unicode码,按字节(0-255)取16进制,加%。
因为unicode是国际化的,所以唯一确定,解码时执行相反的操作
[解决办法]
only mark
[解决办法]
the same mark
[解决办法]
a页面:
string str = Server.UrlEncode(*.ToString());
<a href= 'a.aspx?str= " + str + " '> a </a>


b页面:
string str1 = Server.UrlDecode(Request.QueryString[ "str "].ToString());

------解决方案--------------------


汉字一般用Server.UrlEncode 和 Server.UrlDecode进行转码和解码
要不可能会出现乱码
[解决办法]
楼上回答的都很好

接分
[解决办法]
C# HttpUtility.UrlEncode( " ")
JS escape( " ")
[解决办法]
JS escape( " ")
然后在后台直接取
[解决办法]
百度的编码
System.Web.HttpUtility.UrlEncode( "中文 ", System.Text.UnicodeEncoding.GetEncoding( "GB2312 ")).ToUpper()

Google的编码
System.Web.HttpUtility.UrlEncode( "中文 ")


得到值
System.Web.HttpUtility.UrlDecode( "%BA%AB%B9%FA%D3%EF%D1%A7%CF%B0%D7%CA%C1%CF ", System.Text.UnicodeEncoding.GetEncoding( "GB2312 "))
[解决办法]
孟老大都出马了,啥都不说了.
[解决办法]
女人相信钻石
我相信孟子
[解决办法]
qieyj(温馨港湾) ( ) 信誉:119 2007-8-6 9:04:00 得分: 0



下面先来看两个函数,UTF16转UTF8和UTF8转Utf16的。
function utf16to8(str) {
var out, i, len, c;

out = " ";
len = str.length;
for(i = 0; i < len; i++) {
c = str.charCodeAt(i);
if ((c > = 0x0001) && (c <= 0x007F)) {
out += str.charAt(i);
} else if (c > 0x07FF) {
out += String.fromCharCode(0xE0 | ((c > > 12) & 0x0F));
out += String.fromCharCode(0x80 | ((c > > 6) & 0x3F));
out += String.fromCharCode(0x80 | ((c > > 0) & 0x3F));
} else {
out += String.fromCharCode(0xC0 | ((c > > 6) & 0x1F));
out += String.fromCharCode(0x80 | ((c > > 0) & 0x3F));
}
}
return out;
}

function utf8to16(str) {
var out, i, len, c;
var char2, char3;

out = " ";
len = str.length;
i = 0;
while(i < len) {
c = str.charCodeAt(i++);
switch(c > > 4)
{
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
// 0xxxxxxx
out += str.charAt(i-1);
break;
case 12: case 13:
// 110x xxxx 10xx xxxx
char2 = str.charCodeAt(i++);
out += String.fromCharCode(((c & 0x1F) < < 6) | (char2 & 0x3F));
break;
case 14:
// 1110 xxxx 10xx xxxx 10xx xxxx
char2 = str.charCodeAt(i++);
char3 = str.charCodeAt(i++);
out += String.fromCharCode(((c & 0x0F) < < 12) |
((char2 & 0x3F) < < 6) |
((char3 & 0x3F) < < 0));
break;
}
}

return out;
}

那么为什么需要进行转化呢?因为在JavaScript中获得的中文字符是用UTF16进行编码的,和我们统一的页面标准格式UTF-8可不一样哦,所以需要先进行转化,上面的函数UTF-16到UTF8,然后再进行Base64的编码。

下面是关于Js进行Base64编码和解码的相关操作:

var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ ";
var base64DecodeChars = new Array(
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,


15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
//客户端Base64编码
function base64encode(str) {
var out, i, len;
var c1, c2, c3;

len = str.length;
i = 0;
out = " ";
while(i < len) {
c1 = str.charCodeAt(i++) & 0xff;
if(i == len)
{
out += base64EncodeChars.charAt(c1 > > 2);
out += base64EncodeChars.charAt((c1 & 0x3) < < 4);
out += "== ";
break;
}
c2 = str.charCodeAt(i++);
if(i == len)
{
out += base64EncodeChars.charAt(c1 > > 2);
out += base64EncodeChars.charAt(((c1 & 0x3) < < 4) | ((c2 & 0xF0) > > 4));
out += base64EncodeChars.charAt((c2 & 0xF) < < 2);
out += "= ";
break;
}
c3 = str.charCodeAt(i++);
out += base64EncodeChars.charAt(c1 > > 2);
out += base64EncodeChars.charAt(((c1 & 0x3) < < 4) | ((c2 & 0xF0) > > 4));
out += base64EncodeChars.charAt(((c2 & 0xF) < < 2) | ((c3 & 0xC0) > > 6));
out += base64EncodeChars.charAt(c3 & 0x3F);
}
return out;
}
//客户端Base64解码
function base64decode(str) {
var c1, c2, c3, c4;
var i, len, out;

len = str.length;
i = 0;
out = " ";
while(i < len) {
/* c1 */
do {
c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
} while(i < len && c1 == -1);
if(c1 == -1)
break;

/* c2 */
do {
c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
} while(i < len && c2 == -1);
if(c2 == -1)
break;

out += String.fromCharCode((c1 < < 2) | ((c2 & 0x30) > > 4));

/* c3 */
do {
c3 = str.charCodeAt(i++) & 0xff;
if(c3 == 61)
return out;
c3 = base64DecodeChars[c3];
} while(i < len && c3 == -1);
if(c3 == -1)
break;

out += String.fromCharCode(((c2 & 0XF) < < 4) | ((c3 & 0x3C) > > 2));

/* c4 */
do {
c4 = str.charCodeAt(i++) & 0xff;
if(c4 == 61)
return out;
c4 = base64DecodeChars[c4];
} while(i < len && c4 == -1);
if(c4 == -1)
break;
out += String.fromCharCode(((c3 & 0x03) < < 6) | c4);
}
return out;
}

这样传递过去的值就可以在服务器端解码操作了。


< < < < < < < < < < < < < < < < <这样做有必要吗?不就一个字符编码吗。搞得那么复杂!》》》》》》》》




Server.UrlEncode
Server.UrlDecode


我觉得用C#自带的编码己够用了!

[解决办法]
不过你的思路和精神倒是很好的,不过我个人认为。程序越简单,代码越少越好,这样的效率就会越高!
[解决办法]
路过


My-Blog地址1:http://www.cnblogs.com/nyzfl
My-Blog地址2: http://blog.csdn.net/nyzfl
[解决办法]
在参数传递时对参数编码,比如
  RearshRes.jsp?keywords= " + java.net.URLEncoder.encode(keywords)
  然后在接收参数页面使用如下语句接收
  keywords=new String(request.getParameter( "keywords ").getBytes( "8859_1 "));
------解决方案--------------------


骗子嘛,说好了参与者都有分的,结果连个P都没有~
[解决办法]
大家都说完了~~我只能帮顶了
[解决办法]
上面的很全面了,帮顶!
[解决办法]
UrlEncode

国内的一般是 gb2312 编码
google的是 utf-8 编码
建议 使用 utf-8 编码
[解决办法]
重在参与
[解决办法]
编码问题

热点排行