使用字符串join时出现字符串空白替换错误

本文关键字:字符串 空白 替换 错误 join | 更新日期: 2023-09-27 18:20:52

尝试使用字符串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;

我在谷歌上搜索了很多次,但都找不到任何关于字符串连接替换字符的内容。在调试过程中,我能够将其缩小到出现问题的termsString行。

下面是我得到的字符串的一个实际示例:terms=value1+OR+value2+OR+value3

我该如何阻止空格被+字符替换?

干杯,

James

使用字符串join时出现字符串空白替换错误

为了在服务器端获得URL解码值,您应该使用:

var encoded = "terms=value1+OR+value2+OR+value3";
var decoded = System.Web.HttpUtility.UrlDecode(encoded);

@PanagiotisKanavos,关于我之前使用%20而不是空格的建议,请查看以下JS:

var uri1="terms=value1%20OR%20value2%20OR%20value3";
var uri2="terms=value1+OR+value+OR+value3";
document.write(decodeURIComponent(uri1));
document.write("<br/>");
document.write(decodeURIComponent(uri2));

如果运行它,您会发现编码在某些上下文中可能是敏感的。