如何转义 url 编码?

Posted

技术标签:

【中文标题】如何转义 url 编码?【英文标题】:How to escape url encoding? 【发布时间】:2013-06-18 23:09:21 【问题描述】:

我正在创建一个链接,该链接创建的 URL 参数包含带有 URL 参数的链接。 问题是我有这样的链接

http://mydomain/_layouts/test/MyLinksEdit.aspx?auto=true&source=
    http://vtss-sp2010hh:8088/AdminReports/helloworld.aspx?pdfid=193
&url=http://vtss-sp2010hh:8088/AdminReports/helloworld.aspx?pdfid=193%26pdfname=5.6%20Upgrade
&title=5.6 Upgrade

此链接转到读取这些参数的书签添加页面。

auto是否可以读取以下参数

source 是完成添加或取消后的去向

url是书签链接

title 是书签的名称

urltitle 的值被输入到 2 个字段中。然后用户必须点击savecancel。 问题是当书签页面在字段中输入值时,它会对它们进行解码。 然后如果您尝试保存,它将不会让您保存,因为url 值中的pdfname 值中有一个空格。它需要链接没有任何空格。所以基本上,我希望它在字段中输入后仍然是%20,而不是空格。

sourceautotitle 没有问题,只是 url...

有没有办法解决这个问题?就像我可以为%20 使用的特殊转义字符一样?

注意:我无法修改书签页面。

我正在使用 c#/asp.net 创建链接并转到它。

谢谢

【问题讨论】:

【参考方案1】:

在你交出 url 之前,只需使用 HttpUtilty 的 UrlEncode 方法;

 string encoded = HttpUtility.UrlEncode(url);

【讨论】:

【参考方案2】:

从 .NET Framework 4.5 开始,您可以使用 WebUtility.UrlEncode

它位于System.dll,因此不需要任何额外的引用。

Uri.EscapeUriString不同,它可以正确地转义 URL 的字符

它对字符串的长度没有任何限制,不像Uri.EscapeDataString,所以可以用于POST请求

 System.Net.WebUtility.UrlEncode(urlText)

另一种选择是

 System.Uri.EscapeDataString() 

【讨论】:

我尝试了这个msdn.microsoft.com/en-us/library/zttxte6w.aspx,但它只是像使用+ 一样对其进行编码,这不起作用,因为书签页面对其进行了解码。但我想通了,我刚刚做到了,string.replace(" ", "%2520");。这样,书签页面将%25 解码为%,只留下%20,这是有效的。【参考方案3】:

Uri.EscapeDataString() 和 Uri.UnescapeDataString() 与 UrlEncode/UrlDecode 方法相比是安全的,并且在解码时不会将加号字符转换为空格。

来自其他用户的一些详细信息:http://geekswithblogs.net/mikehuguet/archive/2009/08/16/134123.aspx

【讨论】:

请解释你的答案。目前你所说的是主观的,因为你没有解释为什么。为什么它们是安全的...请为问题作者详细说明。 与 UrlEncode/UrlDecode 方法相比,Uri.EscapeDataString/Uri.UnescapeDataString 不会将加号字符转换为空格。 (我编辑了我的帖子以澄清答案)

以上是关于如何转义 url 编码?的主要内容,如果未能解决你的问题,请参考以下文章

网址URL中特殊字符转义编码

求助,解释下Java中怎样把网址URL编码转义

浏览器url地址殊字符转义编码

url传值含有特殊符号会被转义,怎样保证所有特殊符号都被编码?

url参数+,&,=,/等转义编码

url中特殊字符被转义成编码后如何处理