픽셀단위 문자열 자르기 (한글자르기)
// by ziecle 07.02.06
function __getText(elem)
{
if (elem.innerText) return elem.innerText;
if (elem.textContent) return elem.textContent;
return elem.innerHTML.replace(/<\/?[^>]+>/gi,"");
}
function __setText(elem, text)
{
if (elem.innerText) { elem.innerText = text; return; }
if (elem.textContent) { elem.textContent = text; return; }
while (elem.firstChild) elem.removeChild(elem.firstChild);
elem.appendChild(document.createTextNode(text), elem.childNodes[0]);
}
function stringCut(elem, cutWidth, suffix)
{
var str = __getText(elem);
var len;
if (!str || !(len = str.length))
return;
elem.style.whiteSpace = "nowrap";
elem.style.textOverflow = "ellipsis";
elem.style.overflow = "hidden";
var width = elem.offsetWidth;
if (!width || width < cutWidth - 8)
return;
var temp = cutWidth;
if (suffix)
{
elem.innerHTML += suffix;
cutWidth -= (elem.offsetWidth - width + 4);
if (cutWidth < 0)
return;
}
else
{
suffix = "";
}
elem.title = str;
var cut = parseInt(cutWidth / (width / len)) + 1;
__setText(elem, str.substr(0, cut));
if (elem.offsetWidth > cutWidth)
{
while (--cut)
{
__setText(elem, str.substr(0, cut).replace(/(\s*$)/g, ""));
if (elem.offsetWidth < cutWidth)
{
break;
}
}
}
else
{
while (cut++ < len)
{
__setText(elem, str.substr(0, cut));
if (elem.offsetWidth > cutWidth)
{
__setText(elem, str.substr(0, cut - 1).replace(/(\s*$)/g, ""));
break;
}
}
}
elem.innerHTML += suffix;
}
방법은 무식합니다.
IE 6, 파폭 2.0.0.1에서 테스트했습니다.
사용법:
stringCut(문자열이 들어가는 엘리먼트, 너비, 붙을단어);
예제:
랄랄랄라~라랄라~랄랄랄라~라랄라~랄랄랄라~라랄라~랄랄랄라~라랄라~
'인터넷정보' 카테고리의 다른 글
설문조사 등등 로딩바 구현 (0) | 2007.10.11 |
---|---|
AJAX를 이용한 메모보드(포스트잇) (0) | 2007.10.11 |
PHP로 작동하는 RSS 읽는 함수 (0) | 2007.10.11 |
심플한 라이트박스 효과 (이미지, 아이프레임, html 지원) (0) | 2007.10.11 |
HTTP 인증(Basic타입)이 걸린 URL을 fsockopen에서 여는 방법 (0) | 2007.10.11 |
설치가 필요없는 ftp, telnet 프로그램 (0) | 2007.10.11 |
파폭에서 익스플로러를 쓰자 (0) | 2007.10.11 |
상하 좌우 롤링 소스 (0) | 2007.10.11 |
로깅(Logging) 하기 (0) | 2007.10.11 |
인기도 점수 뽑아오는 클래스(추천 비추천 코멘트 히트수) (0) | 2007.10.11 |
[JS] 한글 초성, 중성, 종성 자르기
/*========================================
js_han_split.js
한글 초성,중성,종성 자르기
사용법
arr = js_han_split('뷃');
arr -> Array('ㅂ','ㅞ','ㄼ');
원리
한글의 유니코드는
초성 기준으로 588개로 나눌 수 있다.(가~깋:588개, 하~힣도 갯수가 같다)
초성 19개, 중성은 21개, 종성은 28개로 나눠지는데, 이것이 일정하게 나뉜다.
그 규칙을 바탕으로 초,중,종성의 차이를 계산해서 초,중,종성을 알아낸다.
mins01,mins,공대여자
MSN,NateOn : mins01(at)lycos.co.kr
2007-03-06
"공대여자는 예쁘다."를 나타내야만 쓸 수 있습니다.
//========================================*/
function js_han_split(char){ //한글을 자름
var char_st = 44032 ;//'가'의 유니코드 넘버(10진수)
var char_ed = 55203 ;//'힝'의 유니코드 넘버(10진수)
//초성구분 : 588단위로 잘림
//가까나다따라마바빠사싸아자짜차카타파하 :초성 19개
//가개갸걔거게겨계고과괘괴교구궈궤귀규그긔기 : 중성 21개
//가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛 : 종성 28개
var arr_1st=new Array('ㄱ','ㄲ','ㄴ','ㄷ','ㄸ','ㄹ','ㅁ','ㅂ','ㅃ','ㅅ','ㅆ','ㅇ','ㅈ','ㅉ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ');//초성 19개
var arr_2nd=new Array('ㅏ','ㅐ','ㅑ','ㅒ','ㅓ','ㅔ','ㅕ','ㅖ','ㅗ','ㅘ','ㅙ','ㅚ','ㅛ','ㅜ','ㅝ','ㅞ','ㅟ','ㅠ','ㅡ','ㅢ','ㅣ');//중성 21개
var arr_3th=new Array('','ㄱ','ㄲ','ㄳ','ㄴ','ㄵ','ㄶ','ㄷ','ㄹ','ㄺ','ㄻ','ㄼ','ㄽ','ㄾ','ㄿ','ㅀ','ㅁ','ㅂ','ㅄ','ㅅ','ㅆ','ㅇ','ㅈ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ');//종성 28개
//======================================================
if(char.length>2){char=char.charAt(0);}
var uninum = escape(char);
if(uninum.length<4) return false;//한글이 아니다
uninum = parseInt(uninum.replace(/\%u/,''),16);
if(uninum < char_st || uninum > char_ed) return false;//한글이 아니다
var uninum2 = uninum-char_st;
var arr_1st_v = Math.floor(uninum2/588);
uninum2 = uninum2%588;
var arr_2nd_v = (Math.floor(uninum2/28));
uninum2 = (uninum2%28);
var arr_3th_v = uninum2;
// alert!!(arr_1st_v); alert!!(arr_2nd_v); alert!!(arr_3th_v);
var return_arr=new Array(arr_1st[arr_1st_v],arr_2nd[arr_2nd_v],arr_3th[arr_3th_v]);
// alert!!(return_arr);
return return_arr;
}
'인터넷정보' 카테고리의 다른 글
IE flash 패치용 - 이올라스, 플래시 테두리 (0) | 2007.10.10 |
---|---|
file에 스킨 입히기 - 첨부파일 (0) | 2007.10.10 |
회색 컬러, 그레이 색상 (0) | 2007.10.10 |
이미지 자동 리사이즈 관련 함수 (0) | 2007.10.10 |
링크 자동 타겟 설정 (0) | 2007.10.10 |
[PHP] 한글 초성,중성,종성 자르기 (0) | 2007.10.10 |
레이어로 툴팁 효과내기 (0) | 2007.10.10 |
window.document.location 간단 설명 (0) | 2007.10.10 |
로보트 검색엔진에 잘 걸리는 Meta Tag 작성법 (0) | 2007.10.10 |
화이트 도메인, 실시간 스팸 차단 리스트 (0) | 2007.10.10 |
[PHP] 한글 초성,중성,종성 자르기
/*========================================
han_split.php (js_han_split.js의 php버전);
한글 초성,중성,종성 자르기
사용법
arr = han_split('뷃');
arr -> array('ㅂ','ㅞ','ㄼ');
원리
한글의 유니코드는
초성 기준으로 588개로 나눌 수 있다.(가~깋:588개, 하~힣도 갯수가 같다)
초성 19개, 중성은 21개, 종성은 28개로 나눠지는데, 이것이 일정하게 나뉜다.
그 규칙을 바탕으로 초,중,종성의 차이를 계산해서 초,중,종성을 알아낸다.
한글이 아닌 것은 무시합니다.
mins01,mins,공대여자
MSN,NateOn : mins01(at)lycos.co.kr
2007-03-06
"공대여자는 예쁘다."를 나타내야만 쓸 수 있습니다.
//========================================*/
function han_split_string($string='',$enc_type='EUC-KR'){
//문자열을 처리할 때
$re_arr = array();
for($i=0,$m=mb_strlen($string,$enc_type);$i<$m;$i++){
$char = mb_substr($string,$i,1,$enc_type);
if($char=='&'){
$char='';
while($char2!=';' && $i<$m){
$char2 = mb_substr($string,$i++,1,$enc_type);
$char .= $char2;
}
$i--;
}
$re_arr[] = han_split($char,$enc_type);
}
return $re_arr;
}
function han_split($char='',$enc_type='EUC-KR'){
//글자 하나만 처리할 때
$char_st = 44032 ;//'가'의 유니코드 넘버(10진수)
$char_ed = 55203 ;//'힝'의 유니코드 넘버(10진수)
//초성구분 : 588단위로 잘림
//가까나다따라마바빠사싸아자짜차카타파하 :초성 19개
//가개갸걔거게겨계고과괘괴교구궈궤귀규그긔기 : 중성 21개
//가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛 : 종성 28개
$arr_1st=array('ㄱ','ㄲ','ㄴ','ㄷ','ㄸ','ㄹ','ㅁ','ㅂ','ㅃ','ㅅ','ㅆ','ㅇ','ㅈ','ㅉ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ');//초성 19개
$arr_2nd=array('ㅏ','ㅐ','ㅑ','ㅒ','ㅓ','ㅔ','ㅕ','ㅖ','ㅗ','ㅘ','ㅙ','ㅚ','ㅛ','ㅜ','ㅝ','ㅞ','ㅟ','ㅠ','ㅡ','ㅢ','ㅣ');//중성 21개
$arr_3th=array('','ㄱ','ㄲ','ㄳ','ㄴ','ㄵ','ㄶ','ㄷ','ㄹ','ㄺ','ㄻ','ㄼ','ㄽ','ㄾ','ㄿ','ㅀ','ㅁ','ㅂ','ㅄ','ㅅ','ㅆ','ㅇ','ㅈ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ');//종성 28개
if(strpos($char,'&#')===false){ //HTML엔티티가 아닐 경우
$char = mb_convert_encoding($char, "UTF-16", $enc_type);
$char = mb_substr($char,0,1,"UTF-16");
$char_hex = '';
for($i=0,$m=strlen($char);$i<$m;$i++){
$char_hex .= sprintf('%02s',base_convert(ord($char{$i}),10,16));
}
//print("문자열 길이 : $m<br/>");
//print("16진수문자열 : $char_hex<br/>");
$char_int=base_convert($char_hex,16,10);
}else{
$char_int = preg_replace('/[^0-9]/','',$char);
}
// print "$char<br>";
// print "$char_hex<br>";
// print "$char_int";
//print("$char_int < $char_st || $char_int > $char_ed");
if($char_int < $char_st || $char_int > $char_ed) return false;//한글이 아니다
$uninum2 = $char_int-$char_st;
$arr_1st_v = floor($uninum2/588);
$uninum2 = $uninum2%588;
$arr_2nd_v = floor($uninum2/28);
$uninum2 = ($uninum2%28);
$arr_3th_v = $uninum2;
$return_arr=array($arr_1st[$arr_1st_v],$arr_2nd[$arr_2nd_v],$arr_3th[$arr_3th_v]);
return $return_arr;
}
?>
'인터넷정보' 카테고리의 다른 글
file에 스킨 입히기 - 첨부파일 (0) | 2007.10.10 |
---|---|
회색 컬러, 그레이 색상 (0) | 2007.10.10 |
이미지 자동 리사이즈 관련 함수 (0) | 2007.10.10 |
링크 자동 타겟 설정 (0) | 2007.10.10 |
[JS] 한글 초성, 중성, 종성 자르기 (0) | 2007.10.10 |
레이어로 툴팁 효과내기 (0) | 2007.10.10 |
window.document.location 간단 설명 (0) | 2007.10.10 |
로보트 검색엔진에 잘 걸리는 Meta Tag 작성법 (0) | 2007.10.10 |
화이트 도메인, 실시간 스팸 차단 리스트 (0) | 2007.10.10 |
HTML안의 href와 src의 주소만 빼내는 정규식 (0) | 2007.10.10 |