今天,茄子_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()(转)的更多相关文章

  1. ASP.NET中UrlEncode应该用Uri.EscapeDataString()

    今天,茄子_2008反馈他博客中的“C++”标签失效.检查了一下代码,生成链接时用的是HttpUtility.UrlEncode(url),从链接地址获取标签时用的是HttpUtility.UrlDe ...

  2. HttpUtility.UrlEncode,Request.RawUrl,HttpUtility.UrlDecode,HttpUtility.UrlPathEncode,Uri.EscapeDataString

    碰到同样问题, 记录一下. 引自:https://www.cnblogs.com/ken-admin/p/5826480.html HttpUtility.UrlDecode(url),从Encode ...

  3. 解决ASP.NET中的各种乱码问题

    解决ASP.NET中的各种乱码问题 阅读目录 开始 页面显示乱码问题 AJAX提交的数据乱码问题 JavaScript中正确的URL编码方式 ASP.NET中正确的URL编码方式 正确的URL编码方式 ...

  4. ASP.NET中实现页面间的参数传递

    ASP.NET中实现页面间的参数传递   编写人:CC阿爸 2013-10-27 l  近来在做泛微OA与公司自行开发的系统集成登录的问题.在研究泛微页面间传递参为参数,综合得了解了一下现行页面间传参 ...

  5. 阿里签名中URLEncode于C#URLEncod不同之处

    问题 如上图所示,阿里云的PercentEncode 转换! 为 %21 PercentEncode 源码为: package com.aliyuncs.auth; import java.io.Un ...

  6. .NET Remoting 体系结构 之 在 ASP.NET 中驻留远程服务器

    迄今为止,所有服务器示例都是运行在自驻留(self-hosted)的.NET 服务器上.自驻留的服务器必 须手动启动..NET Remoting 服务器也可以在许多其他的应用程序类型中启动.在 Win ...

  7. ASP.net 中手工调用WS(POST方式)

    ASP.net 中手工调用WS(POST方式)核心代码:string strUrl="http://localhost:21695/service1.asmx/getmythmod" ...

  8. ASP.NET中Url编码解码

    今天遇到Url编码解码的问题,纠结了一天的时间,结果上网一查才发现太二了我们. 同事写的代码把url用HttpUtility.UrlEncode编码和解码了,本地测试没有问题,部署到服务器上就提示转码 ...

  9. asp.net中导出Excel的方法

    一.asp.net中导出Excel的方法: 本文转载 在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出 ...

随机推荐

  1. 2018-2019 Exp3 免杀原理与实践

    2018-2019 Exp3 免杀原理与实践 目录 一.实验内容说明及基础问题回答 二.实验过程 Task1 1.使用msf编码器生成后门程序及检测 Task1 2.msfvenom生成jar等文件 ...

  2. sublime text 3 3143

    下载链接:https://download.sublimetext.com/Sublime%20Text%20Build%203143%20x64%20Setup.exe 注册信息:sublime t ...

  3. 深入浅出 JIT 编译器

    转载 https://www.ibm.com/developerworks/cn/java/j-lo-just-in-time/ JIT 编译器在运行程序时有两种编译模式可以选择,并且其会在运行时决定 ...

  4. 1062 Talent and Virtue (25 分)

    1062 Talent and Virtue (25 分) About 900 years ago, a Chinese philosopher Sima Guang wrote a history ...

  5. Linux性能分析 vmstat基本语法

    vmstat      vmstat 统计虚拟内存信息,可以对操作系统的proc.memory.CPU.IO等信息进行统计以呈现给用户.   根据操作系统的不同,vmstat的输出结果会有不同.大家可 ...

  6. CentOS 6.6下安装配置Tomcat环境

    本文转载至:http://www.linuxidc.com/Linux/2015-08/122234.htm 实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验 ...

  7. ORACLE中index的rebuild(转)

    Oracle里大量删除记录后,表和索引里占用的数据块空间并没有释放. table move可以释放已删除记录表占用的数据块空间,整理碎片.如果将表格用move方式整理碎片后,索引将失效,这时需要将索引 ...

  8. 用深度学习LSTM炒股:对冲基金案例分析

    英伟达昨天一边发布“全球最大的GPU”,一边经历股价跳水20多美元,到今天发稿时间也没恢复过来.无数同学在后台问文摘菌,要不要抄一波底嘞? 今天用深度学习的序列模型预测股价已经取得了不错的效果,尤其是 ...

  9. Coxph model Pvalue Select

    I am calculating cox propotional hazards models with the coxph function from the survival package.   ...

  10. uva-10129-欧拉通路

    题意:每一个单词的长度最小2,最大1000,单词开头的字母和另外一个单词的末尾一样就可以连接起来,解所有的单词是不是都可以连接起来,没有遗漏的 把每一个单词的第一个字母当成一个结点,最后一个单词也作为 ...