2013-04-11 2 views
1

Request.queryString이받은 문자열과 .resx 파일의 문자열 비교에 문제가 있습니다.C# 문자열 비교가 작동하지 않습니다.

코드는, q라는 변수에 Request.queryString를받을 다음이 라인이 거기에 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>"); 
     } 

는 정적 파일의 검색의대로를, 특수 문자이어야합니다 고려에 대한 seraching : iber&ecirc;, 즉 q에서오고, 라인에서 오는 iber&#234;으로 다음 .Contains, .IndexOf 또는 .LastindexOf이 비교되기 때문에 예를 들어 Iberê 사실 반환하지 않습니다.

Visual Studio에서 찾을 수없는 ResXResourceReader, ResourceReader 및 ResourceManager (이러한 파일은 읽을 경로로 정적 파일을 설정할 수 없음)를 이미 사용해 보았습니다.


EDIT : 해결

문제. 인스턴스 (instance)는 EntitiesEncode 방법

+4

그래서 "iber ê"이 "iber ê"과 같지 않습니다. 그건 맞습니다 - 당신이 놀랐다는 것에 놀랐습니다 ... –

+1

데이터를'byte []'로 변환하고 비교할 필요가있을 것이라고 확신합니다. –

답변

3

문제는 ê 문자가 모두 문자열에 이스케이프이다와 q 값을 덮어 SpecialChars의가 있었다. 이 같은 일을했다면, 그것은 작동하지 않을 것입니다 그래서 :

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

을 당신은 문자열을 unscape해야합니다. System.Web 어셈블리에 HttpUtility을 사용하십시오. 이것은 작동합니다 :

당신이 여분의 어셈블리 참조를 필요가 없습니다 또한, System.Net.WebUtility.HtmlDecode를 사용하여 .NET 4 또는 이상을 사용하는 경우, @ r3bel 아래에 의해 제안
 line = System.Web.HttpUtility.HtmlDecode(line); 
     q = System.Web.HttpUtility.HtmlDecode(q); 
     if (line.Contains(q)) { 
      // do something 
     } 

.

+2

여기에 작성된대로 : http://stackoverflow.com/questions/122641/how-can-i-decode-html-characters-in-c, WebUtility.HtmlDecode .NET 4.0 이상에서 사용할 수 있습니다. – r3bel

+0

@ r3bel 좋은 점은 'System.Web.dll'에 대한 어셈블리 참조가 필요 없다는 것입니다. –

+0

@caerolus - 답변 해 주셔서 감사합니다. 나는 해독을 시도했지만,'HttpUtility.HtmlDecode (q) = iber ê'및'HttpUtility.HtmlDecode (line) = iber ê'. –

관련 문제