【已解决】C#中的HttpUtility.UrlPathEncode没有把引号转换成%22

【问题】

C#中,用HttpUtility.UrlPathEncode后,虽然是把空格换成加号了,但是没有有把引号",转换为对应的%22:

http://www.google.com.hk/search?newwindow=1&safe=strict&site=&source=hp&q=weight%20loss%20site:.edu%20inurl:blog%20"post%20a%20comment"%20-"you%20must%20be%20logged%20in"&btnK=Google%20Search

而如果换用HttpUtility.UrlEncode,的确是可以把对应的引号"转换为%22,冒号转换为对应的%3a:

http://www.google.com.hk/search?newwindow=1&safe=strict&site=&source=hp&q=weight+loss+site%3a.edu+inurl%3ablog+%22post+a+comment%22+-%22you+must+be+logged+in%22&btnK=Google+Search

但是又没法实现把空格转换为加号了。

希望一次性实现,即可以把对应的引号"转换为%22,冒号转换为对应的%3a,又可以实现把空格换成加号的。

【解决过程】

1.参考:

Url encoding quotes and spaces

去试试这个:

Uri.EscapeDataString

结果也没有实现所要的效果,其还是把空格换成%20了:

http://www.google.com.hk/search?newwindow=1&safe=strict&site=&source=hp&q=weight%20loss%20site%3A.edu%20inurl%3Ablog%20%22post%20a%20comment%22%20-%22you%20must%20be%20logged%20in%22&btnK=Google%20Search

2.继续换用Uri.EscapeDataPath试试。结果还没有此函数。

然后找到了另外一个Uri.EscapeUriString,试试。

结果却没把冒号换成%3a:

http://www.google.com.hk/search?newwindow=1&safe=strict&site=&source=hp&q=weight%20loss%20site:.edu%20inurl:blog%20%22post%20a%20comment%22%20-%22you%20must%20be%20logged%20in%22&btnK=Google%20Search

所以,还是不行。

3.最后实在不行,只好参考那位说的:

HttpUtility.UrlEncode(input).Replace("+", "%20");

去用:

HttpUtility.UrlEncode(val).Replace("%20", "+");

然后试试效果。

结果的确获得所要的:

http://www.google.com.hk/search?newwindow=1&safe=strict&site=&source=hp&q=weight+loss+site%3a.edu+inurl%3ablog+%22post+a+comment%22+-%22you+must+be+logged+in%22&btnK=Google+Search

了,但是才发现,其结果就是和本身使用HttpUtility.UrlEncode的结果没区别。。。

 

【总结】

  • 既可以把对应的引号"转换为%22,冒号转换为对应的%3a,又可以实现把空格换成加号的,用:
      HttpUtility.UrlEncode(input);
    • 既可以把对应的引号"转换为%22,冒号转换为对应的%3a,又可以实现把空格换成%20的,用:
        HttpUtility.UrlEncode(input).Replace("+", "%20");
    • 使用HttpUtility.UrlPathEncode,是会把空格换为加号,但是不会把引号"转换为%22,不会把冒号转换为%3a的,因为这些字符在路径Path中,是无需转换(即可被识别的)


    发表评论

    电子邮件地址不会被公开。 必填项已用*标注

    无觅相关文章插件,快速提升流量