从数据库中编码URL查询字符串

时间:2015-03-09 08:14:44

标签: c# asp.net url

我正在尝试对以查询字符串(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。它确实改变了#34; /&#34;虽然。

编辑:此时我很乐意将此网址localhost/Find/here are spaces转为localhost/Find/here+are+spaces

编辑:我现在一直在搜索和尝试解决方案超过5个小时。 任何人都可以告诉我这个:

  • 如果我像Response.Redirect("/Find/" + search);
  • 那样重定向
  • 我按照Social media
  • 进行搜索
  • 然后我使用segment获取queryString作为上面的代码。
  • 现在我想显示有关我数据库中Social media的信息
  • 但与此同时我希望网址说Find/Social+media

PS:我是否需要对每个url-string进行编码?或者我在哪里使用标志和空间。

1 个答案:

答案 0 :(得分:0)

而不是HttpUtility.UrlEncode使用HttpUtility.UrlPathEncode。来自UrlEncode的文档:

  

您可以使用UrlEncode方法或使用。编码URL   UrlPathEncode方法。但是,这些方法会返回不同的结果。   UrlEncode方法将每个空格字符转换为加号字符   的(+)即可。 UrlPathEncode方法将每个空格字符转换为   string “%20”,表示十六进制表示法的空格。使用   编码URL的路径部分时的UrlPathEncode方法   为了保证一致的解码URL,无论哪个   平台或浏览器执行解码。

+字符 表示查询字符串中的空格,但不代表地址部分中的空格。