0

我正在开发一个 asp.net MVC Web 应用程序。我正在构建一个要发送到 Web api 的 URI。但是UriBuilder是将这些字符添加%u200b到参数的开头。这是我的方法:-

public string Add(string title, string account,string site,string description)
{

  XmlDocument doc = new XmlDocument();
  using (var client = new WebClient())
  {
    var query = HttpUtility.ParseQueryString(string.Empty);
    query["account"] = account;
    query["site"] = site;                     
    query["title"] = title;
    query["description"] = description;
    string apiurl = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiURL"];
    var url = new UriBuilder(apiurl);
    url.Query = query.ToString();
    string xml = client.DownloadString(url.ToString());
    doc.LoadXml(xml);

现在site参数将传递给方法,Manchester (MAN)但最终查询将%u200b添加参数,如下所示:-

https://****?account=ABC&site=%u200bManchester+(MAN)&title=ABCDE

那么有人可以就此提出建议吗?为什么UriBuilder要添加%u200b到参数中?现在我传递的值实际上是一个下拉选项,它正确呈现如下+如果我为站点名称选择了另一个选项,我将不会遇到问题:-

在此处输入图像描述

4

1 回答 1

1

问题是您的字符串中有一个零宽度空间(顾名思义,它是“不可见的”)。

不幸的是,根据文档string.Trim,不会删除这些字符:

调用者注意事项:.NET Framework 3.5 SP1 及更早版本维护此方法修剪的空白字符的内部列表。从 .NET Framework 4 开始,该方法会修剪所有 Unicode 空白字符(即,在将它们传递给 Char.IsWhiteSpace 方法时产生真正返回值的字符)。由于此更改,.NET Framework 3.5 SP1 及更早版本中的 Trim 方法删除了 .NET Framework 3.5 SP1 和更早版本中的 Trim 方法中的两个字符,零宽度空格 (U+200B) 和零宽度无间断空格 (U+FEFF) 。 NET Framework 4 及更高版本不会删除. 此外,.NET Framework 3.5 SP1 及更早版本中的 Trim 方法不会修剪三个 Unicode 空白字符:蒙古元音分隔符 (U+180E)、窄无间断空格 (U+202F) 和中等数学空格(U+205F)。

因此,您需要迁移到 .NET 3.5 SP1 或更早版本(不推荐)或string.Replace("\u200B", "")按照@StephenMuecke 的建议使用。

或者,更好的是,修复您的源数据库以删除那里的错误字符。

我还建议安装Notepad++,以便将来更轻松地查看这些隐藏字符。

于 2018-08-02T00:18:57.617 回答