【发布时间】:2013-06-30 21:19:41
【问题描述】:
尝试使用 string.join 将字符串列表连接在一起。当我使用分隔符字符串“OR”时,空格将被替换为“+”,这会破坏我的 targetUri 字符串。下面是加入的代码。
if (DocumentSearchListViewModel.Filter == null)
{
return "http://000.000.00.00:8080/value/value/search/json?terms=value%20OR%20value&target=TEST2&maxResults=5";
}
var targetUri = "http://000.000.00.00:8080/value/value/search/json?";
NameValueCollection termsString = System.Web.HttpUtility.ParseQueryString(string.Empty);
if (!string.IsNullOrWhiteSpace(DocumentSearchListViewModel.Filter.Keywords))
{
if (!string.IsNullOrWhiteSpace(DocumentSearchListViewModel.Filter.Author))
{
DocumentSearchListViewModel.Filter.Keywords += (" " + DocumentSearchListViewModel.Filter.Author);
}
IList<string> keywords = DocumentSearchListViewModel.Filter.Keywords.Split();
termsString["terms"] = string.Join(" OR ", keywords);
}
targetUri += termsString.ToString();
targetUri += "&target=TEST2&maxResults=";
targetUri += DocumentSearchListViewModel.Filter.MaxNumberOfResults ?? "5";
return targetUri;
我在 Google 上进行了多次搜索,但找不到任何关于 string.join 替换字符的内容。在我的调试过程中,我能够将其范围缩小到出现问题的 termsString 行。
这是我得到的字符串的一个实际示例:terms=value1+OR+value2+OR+value3
如何阻止空格被 + 字符替换?
干杯,
詹姆斯
【问题讨论】:
-
'+' 添加在 URL 中。您是否在代码的其他部分对结果进行 URL 编码?如果您设置断点并检查 string.Join 返回的值,我敢打赌它不包含任何 '+' 字符
-
您如何使用
termsString["terms"]值? -
问题不在
string.Join,您的关键字必须以某种方式包含+,否则之后被替换。 -
我相信我正在对它进行 URL 编码,因为 termString["terms"] 被附加到 URL 上
-
即使更新后的代码也不会用'+'替换空格。您在哪里看到“+”字符?一个监视变量,浏览器的地址栏?是否正在重定向到该地址?您是否在 href 属性中使用它?在所有这些情况下,“+”是空格的有效编码。你为什么要用别的东西来改变它?
标签: c# .net string namevaluecollection character-replacement