我在使用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ê
,q
来自该行。
考虑到我已经尝试使用ResXResourceReader(Visual Studio无法找到),ResourceReader和ResourceManager(这些我无法通过要读取的路径设置静态文件)。
编辑:
问题解决了。有一个iberê
的实例,用SpecialChars
方法覆盖q
值
答案 0 :(得分:3)
问题是ê
字符在两个字符串中都被转义。所以如果你做了这样的事情,那就不行了:
string line = "sample iberê text";
string q = "iberê";
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
,因此您不需要额外的汇编参考。