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


한글 초,중,종성 자르기 함수
  2010-01-11 01:13:34 조회:2970
글자수: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   


     한글을 글자단위로 분리 - 문자열 분리112
     PHP 함수를 이용해 간단히 브라우저 종류를 알아내1417
     PHP mb_str_split 함수 생성1781
     폴더속에 파일명을 알아내는 함수2321
     php 변수를 자바스크립트 변수로 사용하는 방법2234
  한글 초,중,종성 자르기 함수2971
     prototype String 함수1923
     OS 체크함수3608
     브라우저 체크함수3825
     php 함수적용1904
     유용한 일반 함수(홈마스타)1822
     phpinfo 에서 system, php버전, Ze(홈마스타)(1) 2374
     웹사이트 개발시 제가 자주쓰는 클래스(홈마스타)(1) 1834
      입력내용중 URL부분을 자동링크로 반환하기(나는2)2151
     다양한 Alert(); 함수화(홈마스타)2066
     귀찮은 쿼리문을 함수화 해보자(홈마스타)2094
     eregi_replace를 이용한 자동링크(홈마스타)1907
     IP를 숫자로 변환하는 함수(홈마스타)2195
     함수 종합 예제(홈마스타)2411
     게시물에서 일부분을 뽑아오는 함수입니다.(홈마스타)1869
     한글 주소 인코딩함수 - 주소만 가능(홈마스타)2217
     쇼핑몰 가격표시 함수(홈마스타)2095
     현재 url값 알아내기(홈마스타)2092
≪ [1]   ≫

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



공지사항


 
인기 글
3119
3696
11266
3181
4110
7063
3686
  [홈마스타] php 한글체크문제
3260
9789
4321
4894
3509
3603
4048
4027

사주풀이마당

 
최근 글
112
239
451
267
270
167
240
3191
841
857
1030
882
4145
3441
3509