【发布时间】:2015-05-10 08:20:25
【问题描述】:
我正在尝试对作为查询字符串 (Response.Redirect("/Find/" + TextBoxSearch.Text);) 发送的搜索进行编码。数据库中有一行名称包括/ 和+,当它输入 URL 时,事情就停止了正常工作。我试过这样的编码:
String encode = HttpUtility.UrlEncode(TextBoxSearch.Text);
Response.Redirect("/Find/" + encode);
但是不能让它工作,我错过了什么?假装搜索值为ex/ex 18+。我怎样才能让它作为查询字符串工作?
不知道这是否重要,但这是我在查找页面中获取查询的方法:
IList<string> segments = Request.GetFriendlyUrlSegments();
string val = "";
for (int i = 0; i < segments.Count; i++)
{
val = segments[i];
}
search = val;
我什至无法正确编码空格。 我试试:
String encoded = Uri.EscapeDataString(TextBoxSearch.Text);
Response.Redirect("/Find/" + encoded);
但这不会将查询字符串中的空格转换为 %20。它确实转换了“/”。
编辑:此时我很乐意将此网址 localhost/Find/here are spaces 转换为 localhost/Find/here+are+spaces
编辑:我已经搜索和尝试解决方案超过 5 个小时了。 谁能告诉我这个:
- 如果我像这样重定向
Response.Redirect("/Find/" + search); - 然后我进行这样的搜索
Social media - 然后我使用段获取查询字符串作为上面的代码。
- 现在我想从我的数据库中显示有关
Social media的信息 - 但同时我想让网址说
Find/Social+media
PS:我需要对每个 url 字符串进行编码吗?或者就在我使用标志和空格的地方。
【问题讨论】:
-
使用 Entity 这样做,斜杠是 url 独有的,因此您可以使用斜杠实体等效
&#46;和 + 实体等效&#43;。您的网址将如下所示:http://www.mywebsite.com/Find/ex&#46ex&nbsp;18&#43. -
但是如何在代码中设置呢?我的应用程序如何知道将这些值转换为实体?我有一些地方可以让您按数据库中的值而不是搜索它等。
-
然后,当您想取回 url 时,要知道如何将它们转换为“普通”字符,请使用
HttpUtility.HtmlDecode(my_url_string)(在this Stackoverflow question 中查看更多信息)。 -
这些都不是必需的,事实上,像 HTML 一样处理 URL 是一个坏主意。
UrlEncode没有损坏,它将空格转换为+,这在查询字符串中是有效的。如果地址中需要空格,请使用 UrlPathEncode