ASP.NET中UrlEncode应该用Uri.EscapeDataString()(转)
今天,茄子_2008反馈他博客中的“C++”标签失效。检查了一下代码,生成链接时用的是HttpUtility.UrlEncode(url),从链接地址获取标签时用的是HttpUtility.UrlDecode(url),从Encode到Decode,“C++”变成了“C ”(加号变成空格)。这是大家熟知的问题,这里我们分析一下这个问题,并给出解决方法。
先看一下问题发生的过程:
1. 原始链接:
http://www.cnblogs.com/xd502djj/tag/C++/
2. HttpUtility.UrlEncode之后,得到:
http://www.cnblogs.com/xd502djj/tag/C%2b%2b/
3. Request.RawUrl,得到:
4. HttpUtility.UrlDecode,得到:
http://www.cnblogs.com/xd502djj/tag/C /
上面第3步已经得到正确的结果,第4步的UrlDecode反而将加号变为了空格。
看来解决方法很简单,取消多此一举的UrlDecode,开始我们也是这么干的。过了一段时间,有用户反映“Windows Phone”的标签失效了,变成了“Windows+Phone”。我们一查,原来是在HttpUtility.UrlEncode时,空格被转换为加号,需要调用UrlDecode将加号还原为空格,于是又把HttpUtility.UrlDecode加上(忘了之前的“C++”标签问题)。然后,“C++”标签又失效...这样反反复复,看似Bug很多,工作很忙,实际上就是一个Bug...
终于有一天,我们说“再也不能这样过”,开始寻找解决方案:
既然HttpUtility.UrlEncode()不能用,那在.NET中找找有没有替代品。
先找到了HttpUtility.UrlPathEncode()。嘿,有用,轻松搞定“C++”与空格问题,但是...后来发现搞不定“C#”,它没有对“#”进行编码。
继续寻找...找到了Uri.EscapeUriString(),与HttpUtility.UrlPathEncode()同样的问题。
继续寻找...终于找到了...Uri.EscapeDataString(),搞定!请看下面的测试代码:
public void UrlEncodeTest()
{
string url = "C++ C#";
Console.WriteLine(HttpUtility.UrlEncode(url));//C%2b%2b+C%23
Console.WriteLine(HttpUtility.UrlPathEncode(url));//C++%20C#
Console.WriteLine(Uri.EscapeUriString(url));//C++%20C#
Console.WriteLine(Uri.EscapeDataString(url));//C%2B%2B%20C%23
}
注:运行环境.NET4。
ASP.NET中UrlEncode应该用Uri.EscapeDataString()(转)的更多相关文章
- ASP.NET中UrlEncode应该用Uri.EscapeDataString()
今天,茄子_2008反馈他博客中的“C++”标签失效.检查了一下代码,生成链接时用的是HttpUtility.UrlEncode(url),从链接地址获取标签时用的是HttpUtility.UrlDe ...
- HttpUtility.UrlEncode,Request.RawUrl,HttpUtility.UrlDecode,HttpUtility.UrlPathEncode,Uri.EscapeDataString
碰到同样问题, 记录一下. 引自:https://www.cnblogs.com/ken-admin/p/5826480.html HttpUtility.UrlDecode(url),从Encode ...
- 解决ASP.NET中的各种乱码问题
解决ASP.NET中的各种乱码问题 阅读目录 开始 页面显示乱码问题 AJAX提交的数据乱码问题 JavaScript中正确的URL编码方式 ASP.NET中正确的URL编码方式 正确的URL编码方式 ...
- ASP.NET中实现页面间的参数传递
ASP.NET中实现页面间的参数传递 编写人:CC阿爸 2013-10-27 l 近来在做泛微OA与公司自行开发的系统集成登录的问题.在研究泛微页面间传递参为参数,综合得了解了一下现行页面间传参 ...
- 阿里签名中URLEncode于C#URLEncod不同之处
问题 如上图所示,阿里云的PercentEncode 转换! 为 %21 PercentEncode 源码为: package com.aliyuncs.auth; import java.io.Un ...
- .NET Remoting 体系结构 之 在 ASP.NET 中驻留远程服务器
迄今为止,所有服务器示例都是运行在自驻留(self-hosted)的.NET 服务器上.自驻留的服务器必 须手动启动..NET Remoting 服务器也可以在许多其他的应用程序类型中启动.在 Win ...
- ASP.net 中手工调用WS(POST方式)
ASP.net 中手工调用WS(POST方式)核心代码:string strUrl="http://localhost:21695/service1.asmx/getmythmod" ...
- ASP.NET中Url编码解码
今天遇到Url编码解码的问题,纠结了一天的时间,结果上网一查才发现太二了我们. 同事写的代码把url用HttpUtility.UrlEncode编码和解码了,本地测试没有问题,部署到服务器上就提示转码 ...
- asp.net中导出Excel的方法
一.asp.net中导出Excel的方法: 本文转载 在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出 ...
随机推荐
- win7一键拖动生成快速启动栏
一键拖动生成快速启动工具栏 ^#x:: ;自动添加快速启动工具栏 if had_added() ExitApp ql_add() Sleep, if (is_locked()) { lock_unlo ...
- 我的Quartz笔记
代码: package com.smt.autorun; import java.io.File; import java.util.ArrayList; import java.util.Date; ...
- 【Spring学习笔记-MVC-11--】Spring MVC之表单标签
一.使用方法 1.要使用Spring MVC提供的表单标签,首先需要在视图页面添加: <%@ taglib prefix="form" uri="http://ww ...
- js实现手机号身份证等加星(*)号
下面来为各位整理了一些关于js实现手机号身份证等加星(*)号代码了,在js不足时我们还补充了php实现手机号身份证等加星(*)号的函数,有兴趣的一起来看看. 有时候为了不让用户的手机号码和身份证号 ...
- Pycharm code templates自定义
Settings>Editor>Code Style>File and Code Templates python script>>>> # 模板变量 ${P ...
- Rust笔记
前言: 学了有段时间了,现在同步到博客园. 正文: Rust语言介绍 l Rust由js之父开发的新型语言,打破了传统的难以接触底层的局面.这是个有C++开发的语言.拥有C的血统 l Rust必须严格 ...
- opencv边缘检测的入门剖析(第七天)
---边缘检测概念理解--- 边缘检测的理解可以结合前面的内核,说到内核在图像中的应用还真是多,到现在为止学的对图像的操作都是核的操作,下面还有更神奇的! 想把边缘检测出来,从图像像素的角度去想,那就 ...
- leetcode961
class Solution: def repeatedNTimes(self, A): doubleN = len(A) N = doubleN / 2 dic = {} for a in A: i ...
- leetcode242
public class Solution { public bool IsAnagram(string s, string t) { Dictionary<char, int> dic ...
- net send 换行和发送广播
net send ip message 要换行的时候按ctrl+t.最后按enter 或 ctrl + m 发出 如果是批处理里面要用: 在命令行下使用:echo ^T > a.txt,注意这里 ...