1

我在对 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ê例如,不返回 true,因为.Contains,.IndexOf.LastindexOf正在比较: iber&ecirc;,即来自q,与iber&#234;来自该行。

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


编辑:

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

4

1 回答 1

3

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

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

您需要取消转义字符串。HttpUtilitySystem.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,因此您不需要额外的程序集参考。

于 2013-04-11T15:27:50.053 回答