C#字符串比较不起作用

时间:2013-04-11 15:21:35

标签: c# asp.net visual-studio encoding string-comparison

我在使用Request.queryString接收的字符串和来自文件.resx的行的字符串比较时遇到了一些问题。

代码接收Request.queryString到名为q的变量,然后转到一个函数来比较一行中是否有q值:

        while ((line = filehtml.ReadLine()) != null)
        {
            if (line.ToLower().Contains(q.ToLower().ToString()))
                HttpContext.Current.Response.Write("<b>Content found!</b>");
            else
                HttpContext.Current.Response.Write("<b>Content not found!</b>");
        }

因为它是静态文件中的搜索,所以必须考虑和搜索特殊字符:Iberê例如,因为.Contains.IndexOf或{{1}而未返回true比较:.LastindexOf,来自iber&ecirc;q来自该行。

考虑到我已经尝试使用ResXResourceReader(Visual Studio无法找到),ResourceReader和ResourceManager(这些我无法通过要读取的路径设置静态文件)。


编辑:

问题解决了。有一个iber&#234;的实例,用SpecialChars方法覆盖q

1 个答案:

答案 0 :(得分:3)

问题是ê字符在两个字符串中都被转义。所以如果你做了这样的事情,那就不行了:

        string line = "sample iber&ecirc; text";
        string q = "iber&#234;";
        if (line.Contains(q)) {
            // do something
        }

你需要取消字符串。在HttpUtility程序集中使用System.Web。这将有效:

        line = System.Web.HttpUtility.HtmlDecode(line);
        q = System.Web.HttpUtility.HtmlDecode(q);
        if (line.Contains(q)) {
            // do something
        }

正如下面@ r3bel所建议的那样,如果您使用的是.net 4或更高版本,您也可以使用System.Net.WebUtility.HtmlDecode,因此您不需要额外的汇编参考。