웹모아 
웹모아 로그인   
웹모아
 
사용자함수예제
 


한글 초,중,종성 자르기 함수
  2010-01-11 01:13:34 조회:2969
글자수:1413


<?
/*========================================
han_split.php (js_han_split.js의 php버전);
한글 초성,중성,종성 자르기

사용법
arr = han_split('&#48579;');
arr -> array('ㅂ','ㅞ','ㄼ');

원리
한글의 유니코드는
초성 기준으로 588개로 나눌 수 있다.(가~&#44619;:588개, 하~&#55203;도 갯수가 같다)
초성 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개
//가각&#44034;&#44035;간&#44037;&#44038;갇갈갉갊&#44043;&#44044;&#44045;&#44046;&#44047;감갑값갓갔강갖갗&#44056;같갚갛 : 종성 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;
}


$arr = han_split('밝');

echo count($arr);
echo "<br>".$arr[0].$arr[1].$arr[2]."<br>";
?>

결과 :
3
ㅂㅏㄺ



 댓글 (0)


사용자함수예제
페이지: 1 / 1   


     한글을 글자단위로 분리 - 문자열 분리56
     PHP 함수를 이용해 간단히 브라우저 종류를 알아내1415
     PHP mb_str_split 함수 생성1774
     폴더속에 파일명을 알아내는 함수2320
     php 변수를 자바스크립트 변수로 사용하는 방법2233
  한글 초,중,종성 자르기 함수2970
     prototype String 함수1922
     OS 체크함수3605
     브라우저 체크함수3823
     php 함수적용1901
     유용한 일반 함수(홈마스타)1821
     phpinfo 에서 system, php버전, Ze(홈마스타)(1) 2372
     웹사이트 개발시 제가 자주쓰는 클래스(홈마스타)(1) 1832
      입력내용중 URL부분을 자동링크로 반환하기(나는2)2150
     다양한 Alert(); 함수화(홈마스타)2060
     귀찮은 쿼리문을 함수화 해보자(홈마스타)2092
     eregi_replace를 이용한 자동링크(홈마스타)1904
     IP를 숫자로 변환하는 함수(홈마스타)2194
     함수 종합 예제(홈마스타)2408
     게시물에서 일부분을 뽑아오는 함수입니다.(홈마스타)1866
     한글 주소 인코딩함수 - 주소만 가능(홈마스타)2215
     쇼핑몰 가격표시 함수(홈마스타)2093
     현재 url값 알아내기(홈마스타)2089
≪ [1]   ≫

복수단어 검색은 공백(space)로 구분해 주세요.



공지사항

 
인기 글
4624
5854
4899
  [홈마스타] setinterval 사용과 중지
5544
  [홈마스타] [RE] input type=\\
6686
3865
6137
20394
4877
10022
6363
4462
4318
4832
6909
 
최근 글
56
220
372
240
221
149
203
3109
822
835
1013
864
4099
3417
3463