我正在尝试对以查询字符串(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
Response.Redirect("/Find/" + search);
Social media
Social media
的信息Find/Social+media
PS:我是否需要对每个url-string进行编码?或者我在哪里使用标志和空间。
答案 0 :(得分:0)
而不是HttpUtility.UrlEncode使用HttpUtility.UrlPathEncode。来自UrlEncode的文档:
您可以使用UrlEncode方法或使用。编码URL UrlPathEncode方法。但是,这些方法会返回不同的结果。 UrlEncode方法将每个空格字符转换为加号字符 的(+)即可。 UrlPathEncode方法将每个空格字符转换为 string “%20”,表示十六进制表示法的空格。使用 编码URL的路径部分时的UrlPathEncode方法 为了保证一致的解码URL,无论哪个 平台或浏览器执行解码。
+
字符 表示查询字符串中的空格,但不代表地址部分中的空格。