2010-07-21 1 views
3

한 줄에 단어가 너무 길면 단어 분리 태그를 삽입하는 기능을 구현하고 싶습니다.html로 인코딩 된 특수 문자로 분할하지 않고 길이별로 단어 분리 기능을 활성화하는 방법

protected string InstertWBRTags(string text, int interval) 
{ 
    if (String.IsNullOrEmpty(text) || interval < 1 || text.Length < interval) 
    { 
     return text; 
    } 
    int pS = 0, pE = 0, tLength = text.Length; 
    StringBuilder sb = new StringBuilder(tLength * 2); 

    while (pS < tLength) 
    { 
     pE = pS + interval; 
     if (pE > tLength) 
      sb.Append(text.Substring(pS)); 
     else 
     { 
      sb.Append(text.Substring(pS, pE - pS)); 
      sb.Append("&#8203;");//<wbr> not supported by IE 8 
     } 
     pS = pE; 
    } 
    return sb.ToString(); 
} 

문제는 : 내가 무엇을 할 수 텍스트 특수 문자를 HTML로 인코딩이 포함 된 경우? &szlig; 안에 TAG 삽입을 방지하려면 어떻게해야합니까? 브라우저에 표시되는 실제 문자열 길이를 계산하려면 어떻게해야합니까? 는 &#9825;&#9829; ♡ ♥ 같은 문자열은 브라우저에서만 2 문자 (마음)를 포함하지만, 그 길이 당신은 당신이 경우, 다음이 무엇인지 살펴보다 &을 발견 할 때, 문자로 전체 텍스트 문자를 통과해야하는 14

답변

1

하나 개의 솔루션들이 표현하는 유니 코드 문자로 엔티티를 디코딩하고 그 작업을하는 것입니다 매우 단순화 된 버전에서

. 그렇게하려면 use System.Net.WebUtility.HtmlDecode() if you're in .NET 4 or System.Web.HttpUtility.HtmlDecode() otherwise.

그러나 모든 유니 코드 문자가 하나의 char에 들어 맞는 것은 아닙니다.

+0

'HtmlEncode'와'HtmlDecode' 메소드는 대칭이 아닙니다. 디코딩은 엔티티를 단일 문자로 변환하지만 인코딩은 이러한 모든 문자를 다시 엔티티로 변환하지 않습니다. 또한 원본 텍스트가'<'와 같은 문자와 '<'과 같은 엔티티를 포함하는 경우, 디코딩 후 이들을 구별 할 방법이 없습니다. –

+0

나는 HtmlDecode를 전혀 사용하지 말아야한다는 것을 의미했다. 하지만 출력이 유니 코드 여야합니다. – svick

+0

완벽하게 작동합니다. <와 같은 문자는 허용되지 않습니다. –

0

입니다 당신이 #에 도달하면 그 이후에 열이 일련의 숫자가 될 것입니다 (당신은 그것을 또한 확인할 수 있습니다). 이러한 상황에서 반복기를 가장 가까운 세미콜론의 위치로 이동하고 카운터를 증가시킵니다. 자바 방언

int count = 0; 

     for(int i = 0; i < text.length(); i++) { 

      if(text.charAt(i) == '&') { 
       i = text.indexOf(';', i) + 1; // what, from 
      } 

      count++; 

     } 

관련 문제