【问题标题】:How to URL encode periods?如何对句点进行 URL 编码?
【发布时间】:2011-05-31 17:45:35
【问题描述】:

我需要对一些句点进行 URL 编码,因为我必须传递一些文档路径,就像这样

http://example.com/test.aspx?document=test.docx

所以 test.docx 导致我出现非法字符错误。所以我需要把它改成

.  -->  %2E

我尝试使用 Server.UrlEncode

  string b = Server.UrlEncode("http://example.com/test.aspx?document=test.docx");

但我明白了

"http%3a%2f%2fexample.com%2ftest.aspx%3fdocument%3dtest.docx"

那么我是否必须像字符串替换一样使用并手动执行并用该代码替换所有句点?

【问题讨论】:

  • 你确定是.吗?对我来说,这看起来像是一个完全有效的查询字符串。

标签: c# urlencode url-encoding


【解决方案1】:

这是一个非常古老的问题,但我在寻找类似问题时遇到了这个问题。我在网址的末尾添加了一个“/”,其中包含句点,它解决了这个问题。

【讨论】:

  • 太棒了。 -- 这对我来说适用于 Web API。 ——我能做的就是摇头。 DX
  • 只是给任何将使用此答案的人的注释。这将适用于 大多数 用例,包括提供的一个 OP。如果 URL 以点字符结尾,这不起作用
  • 很好的解决方案,但是如果用户重新加载页面,他会在 Angular 中再次获得 404
  • 我不相信,但这是真的。添加斜线可以解决除尾随句点之外的大多数问题。
【解决方案2】:

没有问题的时期(假设 %2E 没有解决问题)。句点是一个完全有效的 URL 字符,无论问题是不是句点。检查正在抛出的错误的堆栈跟踪或发布完整的错误详细信息。

而且您不应该对整个路径进行 URL 编码。只有查询字符串参数value

string b = "http://example.com/test.aspx?document=" + Server.UrlEncode("test.docx");

如果你这样尝试,你还会收到错误吗?

我不会用十英尺长的杆子碰 SharePoint。但是,逃避这一时期并不一定会阻止 SharePoint 进行恶作剧。但我想你至少应该尝试一下。

Server.UrlEncode("test.docx").Replace(".", "%2E");

【讨论】:

  • 好吧 sharepoint 不喜欢它。我认为在查询字符串或使用部分 url 路径查找根文件夹且不能包含句点的任何内容中。来自极限测试的 %2E 似乎可以解决它。
  • 我在使用 ASP.NET 网页时遇到了类似的问题。示例:cutrategamer.com/app/remove-subscription/30/myemail%40gmail.com 会抛出错误消息。将尝试用“%2E”替换句点。
  • 运气好吗,@Tod1d?我在使用非常相似的 ASP.NET Web API url 时遇到了同样的问题。
  • @TimFranklin 和其他有同样问题的人,请参阅下面的 Andrew 的回答。 - 尾部斜线似乎可以解决它。 -- 这是一个非常愚蠢的错误 IMO。
猜你喜欢
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 2018-06-30
  • 2011-08-30
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多