URL 用+号替换空格
URL replace spaces with + signs
我最近创建了一个关于如何在 URL 中使用 /
和 +
等符号的问题,但这让我想到了另一个问题,如何替换 space 在我的 URL 中,为什么?
如果我的 url 是 something.com/Find/this is my search
,那为什么不对?为什么我们需要将其更改为 something.com/Find/this+is+my+search
我已经搜索并尝试了 5 个多小时的解决方案。我到处看答案都是一样的,使用 httputility.urlencode
或 Uri.escapeDataString
。但我试过这样做:
string encode = Uri.EscapeDataString(TextBoxSearch.Text);
Response.Redirect("/Find/" + encode );
string encode = HttpUtility.UrlEncode(TextBoxSearch.Text);
Response.Redirect("/Find/" + encode );
string encode = encode.replace(" ", "+")
Response.Redirect("/Find/" + encode);
None 这些工作,它们不会用任何东西替换 space(string.replace 会,但这也会导致字符串发生变化,这意味着它找不到值在下一页的数据库中)。
如果我对整个 URL 进行编码,那么我所有的 /
都会变成 %,这显然不是我想要的。
我需要的
If I redirect like this Response.Redirect("/Find/" + search);.
And I make a search like this "Social media".
I then get the queryString on the next page and use it to load info from my database.
Now I want to display info about Social media from my database.
but at the same time I want the url to say Find/Social+media.
编辑:
我尝试的是:
string encode = HttpUtility.UrlEncode(TextBoxSearch.Text);
Response.Redirect("/Find/" + encode);
这给了我一个“404.11 - 请求过滤模块配置为拒绝包含双转义序列的请求。”根据要求 URL http://localhost:65273/Find/social+media
在我的 Find.aspx onLoad():
IList<string> segments = Request.GetFriendlyUrlSegments();
string val = "";
for (int i = 0; i < segments.Count; i++)
{
val = segments[i];
}
search = val;
将 space 替换为 %20
完全没问题,因为这是 space 的转义形式。 %20
URL 安全,因此您可以使用它。
其实%20
就是space的ASCII code的十六进制值。使用 HttpUtility.UrlEncode
就足够了。
最好使用 %20
而不是 +
,如以下答案所述:When to encode space to plus (+) or %20?.
HttpUtility.UrlEncode
将空格替换为 +
,但正如帕特里克所说,最好使用 %20
。因此,您可以使用 String.Replace
.
来完成此操作
var encode = TextBoxSearch.Text.Replace(" ", "%20");
也就是说,您还应该对值进行编码以防止任何类型的 XSS 攻击。您可以通过首先编码来完成这两项操作,然后从值中替换 +
。
var encode = HttpUtility.UrlEncode(TextBoxSearch.Text).Replace("+", "%20");
我最近创建了一个关于如何在 URL 中使用 /
和 +
等符号的问题,但这让我想到了另一个问题,如何替换 space 在我的 URL 中,为什么?
如果我的 url 是 something.com/Find/this is my search
,那为什么不对?为什么我们需要将其更改为 something.com/Find/this+is+my+search
我已经搜索并尝试了 5 个多小时的解决方案。我到处看答案都是一样的,使用 httputility.urlencode
或 Uri.escapeDataString
。但我试过这样做:
string encode = Uri.EscapeDataString(TextBoxSearch.Text);
Response.Redirect("/Find/" + encode );
string encode = HttpUtility.UrlEncode(TextBoxSearch.Text);
Response.Redirect("/Find/" + encode );
string encode = encode.replace(" ", "+")
Response.Redirect("/Find/" + encode);
None 这些工作,它们不会用任何东西替换 space(string.replace 会,但这也会导致字符串发生变化,这意味着它找不到值在下一页的数据库中)。
如果我对整个 URL 进行编码,那么我所有的 /
都会变成 %,这显然不是我想要的。
我需要的
If I redirect like this Response.Redirect("/Find/" + search);.
And I make a search like this "Social media".
I then get the queryString on the next page and use it to load info from my database.
Now I want to display info about Social media from my database.
but at the same time I want the url to say Find/Social+media.
编辑:
我尝试的是:
string encode = HttpUtility.UrlEncode(TextBoxSearch.Text);
Response.Redirect("/Find/" + encode);
这给了我一个“404.11 - 请求过滤模块配置为拒绝包含双转义序列的请求。”根据要求 URL http://localhost:65273/Find/social+media
在我的 Find.aspx onLoad():
IList<string> segments = Request.GetFriendlyUrlSegments();
string val = "";
for (int i = 0; i < segments.Count; i++)
{
val = segments[i];
}
search = val;
将 space 替换为 %20
完全没问题,因为这是 space 的转义形式。 %20
URL 安全,因此您可以使用它。
其实%20
就是space的ASCII code的十六进制值。使用 HttpUtility.UrlEncode
就足够了。
最好使用 %20
而不是 +
,如以下答案所述:When to encode space to plus (+) or %20?.
HttpUtility.UrlEncode
将空格替换为 +
,但正如帕特里克所说,最好使用 %20
。因此,您可以使用 String.Replace
.
var encode = TextBoxSearch.Text.Replace(" ", "%20");
也就是说,您还应该对值进行编码以防止任何类型的 XSS 攻击。您可以通过首先编码来完成这两项操作,然后从值中替换 +
。
var encode = HttpUtility.UrlEncode(TextBoxSearch.Text).Replace("+", "%20");