惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
月光博客
月光博客
爱范儿
爱范儿
罗磊的独立博客
博客园 - 叶小钗
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
aimingoo的专栏
aimingoo的专栏
D
DataBreaches.Net
F
Full Disclosure
博客园 - 司徒正美
小众软件
小众软件
D
Docker
大猫的无限游戏
大猫的无限游戏
O
OpenAI News
T
Threatpost
Engineering at Meta
Engineering at Meta
Cisco Talos Blog
Cisco Talos Blog
Google DeepMind News
Google DeepMind News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Y
Y Combinator Blog
H
Help Net Security
C
Cyber Attacks, Cyber Crime and Cyber Security
C
Cisco Blogs
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
博客园 - 聂微东
A
Arctic Wolf
T
Threat Research - Cisco Blogs
U
Unit 42
NISL@THU
NISL@THU
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 【当耐特】
T
Troy Hunt's Blog
PCI Perspectives
PCI Perspectives
Webroot Blog
Webroot Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
AWS News Blog
AWS News Blog
The Last Watchdog
The Last Watchdog
Last Week in AI
Last Week in AI
V
Vulnerabilities – Threatpost
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Proofpoint News Feed
腾讯CDC
V
V2EX
A
About on SuperTechFans
Know Your Adversary
Know Your Adversary
S
Security Affairs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 张远强

原版SQLHelper.cs下载 Chrome浏览器Proxy Switchy、Tampermonkey等扩展程序下载 GreaseMonkey脚本:阻止Google转换搜索链接地址 站在31岁,理解程序员年过三十这道坎 GreaseMonkey让网站登录验证码形同虚设 DateTime.ToString格式限定符转义 借Windows说明Linux分区和挂载点 JSON解析类(C#) 彻底解决ASP.NET MD5加密中文结果和ASP不一致的问题 SharpZipLib使用示例 DotNetZip使用示例 Dvbbs 8.2.0 RC1多功能编辑器,提供下载 B/S系统版本管理V1.0正式发布 ASP.NET 2.0缓存 个人网站与动网整合步骤(支持PDO1.0) - 张远强 - 博客园 C#中显/隐式实现接口及其访问方法 C#接口范例 使用Filter实现信息的二次检索 使用overflow代替left截取指定长度字符串
巧用escape解决ASP.NET中URL传参乱码问题
张远强 · 2007-12-27 · via 博客园 - 张远强

1<href="#" onclick="window.open('http://www.mzwu.com/test.aspx?title=木子屋');">Links</a>

在test.aspx中,只要获取title参数的值并显示出来即可,本来用Request["title"]就可解决的问题却因链接所处页面的编码不同而变得复杂起来:

当链接所处的页面是用GB2312编码时,如果test.aspx也是GB2312则获取的参数值不乱码,否则乱码;
当链接所处的页面是用UTF-8编码时,如果test.aspx也是UTF-8则获取的参数值不乱码,否则乱码;

gb.htm:

 1<html>
 2<head>
 3<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 4<title>gb2312测试页</title>
 5</head>
 6
 7<body>
 8<href="#" onclick="window.open('http://www.mzwu.com/test.aspx?title=木子屋');">Links</a>
 9</body>
10</html>

utf8.htm:

 1<html>
 2<head>
 3<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 4<title>utf-8测试页</title>
 5</head>
 6
 7<body>
 8<href="#" onclick="window.open('http://www.mzwu.com/test.aspx?title=木子屋');">Links</a>
 9</body>
10</html>

test.aspx.cs:

1private void Page_Load(object sender, System.EventArgs e)
2{
3    String Request1;
4    Request1 = Request["title"];
5    Response.Write(Request1);
6}

有没办法让test.aspx不论URL中的参数以何种方式编码都能正常的获取显示呢?通过配置web.config的<globalization requestEncoding="gb2312|utf-8" />都只会顾此失彼,不能完美的解决我们的问题。最终,在老农的提示下使用JS的escape问题得以完美解决:
gb.htm:

 1<html>
 2<head>
 3<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 4<title>gb2312测试页</title>
 5<script language="javascript">
 6function winopen(url,width,height)
 7{
 8    var newurl,arrurl;
 9    if(typeof(url) == "#ff0000" || url == "")
10    {
11        return ;
12    }

13    else
14    {
15        if(url.indexOf("?"== -1)
16        {
17            newurl = url;
18        }

19        else
20        {
21            newurl = url.substring(0,url.indexOf("?")+1);
22            arrurl = url.substring(url.indexOf("?")+1).split("&");
23            for(var i =0;i<arrurl.length;i++)
24            {
25                newurl += arrurl[i].split("=")[0+ "=" + escape(arrurl[i].split("=")[1]) + "&";
26            }

27            newurl = newurl.substring(0,newurl.length-1);
28        }

29    }

30    if(typeof(width) != "number" || typeof(height) != "number")
31    {
32        window.open(newurl);
33    }

34    else
35    {
36        window.open(newurl,"","width=" + width + ",height=" + height);
37    }

38}

39
</script>
40</head>
41
42<body>
43<href="#" onclick="winopen('http://www.mzwu.com/test.aspx?title=木子屋');">Links</a>
44</body>
45</html>

utf8.htm:

 1<html>
 2<head>
 3<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 4<title>utf-8测试页</title>
 5<script language="javascript">
 6function winopen(url,width,height)
 7{
 8    var newurl,arrurl;
 9    if(typeof(url) == "undefined" || url == "")
10    {
11        return ;
12    }

13    else
14    {
15        if(url.indexOf("?"== -1)
16        {
17            newurl = url;
18        }

19        else
20        {
21            newurl = url.substring(0,url.indexOf("?")+1);
22            arrurl = url.substring(url.indexOf("?")+1).split("&");
23            for(var i =0;i<arrurl.length;i++)
24            {
25                newurl += arrurl[i].split("=")[0+ "=" + escape(arrurl[i].split("=")[1]) + "&";
26            }

27            newurl = newurl.substring(0,newurl.length-1);
28        }

29    }

30    if(typeof(width) != "number" || typeof(height) != "number")
31    {
32        window.open(newurl);
33    }

34    else
35    {
36        window.open(newurl,"","width=" + width + ",height=" + height);
37    }

38}

39
</script>
40</head>
41
42<body>
43<href="#" onclick="winopen('http://www.mzwu.com/test.aspx?title=木子屋',300,400);">Links</a>
44</body>
45</html>

现在完全不用考虑链接所在页面的编码方式,也不用绞尽脑汁去想如何在test.aspx对不同编码的参数值进行转换,只需用一个escape就够了,very good!