본문 바로가기
웹프로그램

ASP 제목이나 글자 길이가 지정한 길이보다 초과하면 잘라 내고 ... 붙이기

by 세이박스 2008. 11. 19.
반응형
 제목이나 글자 길이가 지정한 길이보다 긴 경우 일부만 잘라서 뒤에 "..." 표시를 하고자 할경우  Mid() 함수를 사용해서 자를경우 한글, 영문 모두 1글자로 처리 되어 낭패를 보는 경우가 있다.
분명 한글의 경우 한자가 2바이트 즉, 영문 2자에 해당 하는데 말이죠..
따라서, 1바이트씩 잘라서 계산하는 함수가 필요하겠죠!
다음과 같은 함수를 그냥 가져다 사용하시면 됩니다.

<%
 function hanlen(str, con) 
  stat = 0 
  strlen = 0  'str전체길이 
  strbyte = 0 'str 전체바이트수  
  strlen=len(str) '문자열의 길이를 구한다 
  hanlen = strlen  
  for i=1 to strlen '문자열을 한문자씩 읽어온다..   
   char = ""   
   char = mid(str, i, i)   
   char = asc(cstr(char)) '아스키 코드값 읽어오기   
   char = left(char, 1) '값이 -값이 나오면 한글임    
   if char = "-" then     
    strbyte = strbyte + 2 '읽어온 코드값이 -이면 2바이트   
   else     
    strbyte = strbyte + 1 '그렇지 않으면 1바이트   
   end if    
   if con = 1 then 'con이 0이면 전체 바이트길이, 1이면 문자열을 자를 바이트가 되는 문자열 위치 i     
    if strbyte >= 26 and stat = 0 then '자를 문자열의 바이트 길이는 60바이트임(마지막에 1byte차이가 있을 수                                                   
     '있음.(처리하려면 더 복잡해 지니 이 정도만..)       
     hanlen = i       
     stat = 1 '한번만 처리하기 위해 (루프를 탈출하는 방법을 몰라서..ㅠㅠ)     
    end if   
   else     
    hanlen = strbyte   
   end if 
  next
 end function
 Prdtnm = "가나다라마abc타 카123def 아자32 423"
 Prdtnm_len = hanlen(Prdtnm, 0) '전체 문자열 바이트 길이를 구함 
 Prdtnm_pos = hanlen(Prdtnm, 1) '전체 문자열중 자를 위치 구함  
 If Prdtnm_len > 28 Then   
  Prdtnm = left(Prdtnm, Prdtnm_pos) & "..."
 end if
%>
 
위 소스는 영문기준으로 28자 이상인 경우 26자만 가져와서 뒤에 "..." 붙이는 소스입니다.
제한 범위나 자르는 범위는 필요에 맞게 변경 하시면 됩니다.
참고로 space 공백도 영문 한글자에 해당하며 한글은 한글자에 영문 2자에 해당합니다.

위 글은 세이박스에서 작성 글이므로 다른곳에 게시할 경우 반드시 세이박스 출처를 남겨주시기 바랍니다.
출처 : 세이박스 http://saybox.tistory.com/590
반응형