【问题】
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
去试试这个:
结果也没有实现所要的效果,其还是把空格换成%20了:
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(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);
HttpUtility.UrlEncode(input).Replace("+", "%20");