我有一个查询从mssql服务器上的数据库中检索一些信息,如下所示:
String sql = "select Name from Projects where Name NOT IN (select Project_Name from vDays) and Name like @filterText order by Name";
我有一个文本框,允许用户输入一些文本来过滤在文本之前,之后或周围使用%符号时按名称返回的项目。这种方法很好,除非用户输入以%ad
开头的内容。发生这种情况时,调试器(使用VS2010)将文本显示为�
。这当然会传递给查询,但不会返回正确的信息。
我已经完成了一堆谷歌搜索,无法找到%ad
转换为�
的原因。到目前为止,其他所有查询都运行良好。
更新
好的,所以当我使用Response.Redirect
访问不同页面并使用它发送文本框值时,就会发生更改。
filterText = FilterTextBox.Text;
Response.Redirect("UnusedProjects_Results.aspx?filterText=" + filterText);
filterText
正确显示%ad
。
然后在下一页:
string filterText = "";
filterText = Request.QueryString["filterText"];
filterText
显示�
正如@ DavidT.Macknet在评论中所说,这似乎是因为URL编码。有没有办法将那些%符号保留在那里而不进行编码?如果没有,我可以随时更改,以便用户输入*
,然后在查询发生之前将所有*
替换为%
。
答案 0 :(得分:2)
您需要对行<{1}}进行编码
filterText
使用uri编码。使用Uri.EscapeDataString
的好工具是使用more reliable,而不是使用Response.Redirect("UnusedProjects_Results.aspx?filterText=" + filterText);
,这是您将看到的大多数代码示例所使用的内容。
HttpUtility.UrlEncode
这将对Response.Redirect("UnusedProjects_Results.aspx?filterText=" + Uri.EscapeDataString(filterText));
符号进行编码,以便在重定向发生后正确解析。