建议删除斜杠的编码,我可以将其用作 REST 样式 URL 参数的格式

发布于 2024-08-25 06:57:59 字数 459 浏览 3 评论 0原文

给定 REST 样式 URL 的路径:

http://site.com/rest/customer/foo/robot/bar/1

当您获取它时,它会向 foo-customer 返回一个 PDF,其中包含 bar 的页面 1 -网址。

而 foo 是客户的名称 bar 是一个 URL。 URL 通常包含斜杠,可能看起来像这样:

http://anothersite.com/interestingarticle.html

由于 REST URL 的单独参数由斜杠分隔,我不能将其直接放入上面的 REST URL 中。我应该使用哪种编码?我不能使用 Base 64,因为它也使用斜线。

作为技术说明,我将在 .NET 应用程序中对 URL 进行编码,并在 PHP 中对其进行解码。

Given a path to a REST style URL:

http://site.com/rest/customer/foo/robot/bar/1

When you GET it, it returns a PDF to the foo-customer containing page 1 of the bar-URL.

While foo is the name of the customer bar is an URL. The URL usually contains slashes and might look something like this:

http://anothersite.com/interestingarticle.html

As REST URL's separate arguments by slashes I can't just put it into the REST URL above. Which encoding should I use? I can't use Base 64 as it utilizes the slash as well.

As a technical note I will encode the URL in a .NET-application and decode it in PHP.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

给妤﹃绝世温柔 2024-09-01 06:57:59

您的用例到底是什么?为什么 bar 需要是 URL?服务器可以以任何它想要的方式构造 URI。

如果您出于某种原因必须使用该 URL,请执行以下操作:

http ://site.com/rest/customer/foo/robot?bar=http://anothersite.com/interestingarticle.html&page=1

(当然带有 urlencoded 查询字符串)。

What is your use case exactly? Why does bar need to be a URL? The server can construct the URIs any way it wants to.

If you for some reason MUST use the URL, do this:

http://site.com/rest/customer/foo/robot?bar=http://anothersite.com/interestingarticle.html&page=1

(with urlencoded query string of course).

恏ㄋ傷疤忘ㄋ疼 2024-09-01 06:57:59

通过对 URL 进行双重 URL 编码,它将永远不会包含任何斜杠,因此可以使用由斜杠分隔的参数。

使用 C# 对 URL 进行编码并从 .NET 发送:

String url = "http://urltoencode.com/a/page";
System.Text.Encoding westernEuropeanISOencoding = System.Text.Encoding.GetEncoding("iso-8859-1");
String doubleEncodedUrl = System.Web.HttpUtility.UrlEncode(url, westernEuropeanISOencoding);
doubleEncodedUrl = System.Web.HttpUtility.UrlEncode(doubleEncodedUrl, westernEuropeanISOencoding);

接收 PHP 脚本对 URL 进行双重解码:

url = decode(decode($receivedDoubleEncodedUrl));

By double URL-encoding the URL it will never contain any slashes and may therefore use parameters separated by slashes.

The URL is encoded and sent from .NET using C#:

String url = "http://urltoencode.com/a/page";
System.Text.Encoding westernEuropeanISOencoding = System.Text.Encoding.GetEncoding("iso-8859-1");
String doubleEncodedUrl = System.Web.HttpUtility.UrlEncode(url, westernEuropeanISOencoding);
doubleEncodedUrl = System.Web.HttpUtility.UrlEncode(doubleEncodedUrl, westernEuropeanISOencoding);

The receiving PHP-script double decodes the URL:

url = decode(decode($receivedDoubleEncodedUrl));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文