반응형
제목이나 글자 길이가 지정한 길이보다 긴 경우 일부만 잘라서 뒤에 "..." 표시를 하고자 할경우 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
따라서, 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
%>
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
위 글은 세이박스에서 작성 글이므로 다른곳에 게시할 경우 반드시 세이박스 출처를 남겨주시기 바랍니다.
출처 : 세이박스 http://saybox.tistory.com/590
반응형
'웹프로그램' 카테고리의 다른 글
PHP strip_tags() 문자열에 html 태그나 php문구 모두 제거 (0) | 2009.01.30 |
---|---|
[JSP] how to upload image using JSP (0) | 2009.01.21 |
PHP Header 다운로드 에서 파일이름이 한글로 된경우 바로 열기 다운로드 안되는경우 (0) | 2009.01.05 |
프록시 proxy 접속자 실제 아이피 ip 확인 가능 (0) | 2008.11.19 |
자바스크립트 <a href 클릭시 팝업 띄우기 및 클릭한 URL 값 받아오기 (0) | 2008.11.07 |
자바스크립트로 클릭 이벤트 강제 발생 시키기 (0) | 2008.11.07 |
자바스크립트 select 셀렉트 박스 선택한 값을 받아오기 (0) | 2008.11.07 |
자바스크립트 아이프레임 내용 길이에 맞게 리사즈 하기 (0) | 2008.11.07 |