c#字符串比较不起作用

本文关键字:不起作用 比较 字符串 | 更新日期: 2023-09-27 18:08:54

我对请求收到的字符串的字符串比较有一些问题。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ê例如,不返回true,因为.Contains, .IndexOf.LastindexOf比较:iber&ecirc;,来自q,与iber&#234;,来自行。

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


编辑:

问题解决了。有一个SpecialChars实例,用EntitiesEncode方法覆盖q

c#字符串比较不起作用

问题是ê字符在两个字符串中都被转义了。所以如果你做了这样的事情,它将不起作用:

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

您需要对字符串进行解义。在System.Web程序集中使用HttpUtility

        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,所以你不需要额外的程序集引用。