【问题标题】:Encode URL querystring from database从数据库编码 URL 查询字符串
【发布时间】: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 独有的,因此您可以使用斜杠实体等效 &amp;#46; 和 + 实体等效 &amp;#43;。您的网址将如下所示:http://www.mywebsite.com/Find/ex&amp;#46ex&amp;nbsp;18&amp;#43.
  • 但是如何在代码中设置呢?我的应用程序如何知道将这些值转换为实体?我有一些地方可以让您按数据库中的值而不是搜索它等。
  • 然后,当您想取回 url 时,要知道如何将它们转换为“普通”字符,请使用 HttpUtility.HtmlDecode(my_url_string)(在this Stackoverflow question 中查看更多信息)。
  • 这些都不是必需的,事实上,像 HTML 一样处理 URL 是一个坏主意。 UrlEncode 没有损坏,它将空格转换为+,这在查询字符串中有效的。如果地址中需要空格,请使用 UrlPathEncode

标签: c# asp.net url


【解决方案1】:

使用HttpUtility.UrlPathEncode 代替HttpUtility.UrlEncode。来自 UrlEncode 的文档:

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

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

【讨论】:

    猜你喜欢
    • 2012-06-02
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多