웹모아 
웹모아[손님] 검색 로그인   
웹모아
 
사용자함수예제
 


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


<?
/*========================================
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 / 2   

 
  한글을 글자단위로 분리 - 문자열 분리
$chganall2_arr = preg_split("//u", $chganall2, -1, PREG_SPLIT_NO_EMPTY);   //한글을 글자단위로 분리조회(164)          



  PHP 함수를 이용해 간단히 브라우저 종류를 알아내
function getBrowser() { $u_agent = $_SERVER['HTTP_USER_AGENT']; $bname = 'Unknown'; $platform = 'Unknown'; $version= ""; //Fir조회(1423)          



  PHP mb_str_split 함수 생성
str_split 는 문자열을 한글자씩 분할하여 배열로 리턴하는 함수인데, 한글과 같이 2byte 이상인 글자에 대해 정상적인 처리가 되지 않습니다. 이런 경우 mb_ 가 붙은 멀티 바이트 캐릭터 처리 함수가 존재하는데 str_split 의 경우에는 해당하는 함수가 없는 상태입니다. 때문에 한글과 같은 2byte 이상 문자를 처리하기 위한조회(1788)          



  폴더속에 파일명을 알아내는 함수
조회(2323)          



  php 변수를 자바스크립트 변수로 사용하는 방법
php배열 : $arr var arr = new Array(); 결과 : var arr = new Array("6635", "6458", "7207", "6315", "6617", "6808", "6249", "6645", 조회(2236)          



  한글 초,중,종성 자르기 함수
결과 : 3 ㅂㅏㄺ조회(2974)          





  prototype String 함수
// HTML 특수문자를 변환함수 String.prototype.htmlChars = function () { var str = ((this.replace('"', '&')).replace('"', '"')).replace('\'', '&#39;'); return (str.replace('', '조회(1925)          



  OS 체크함수
php에서 OS를 체크하는 함수 입니다. /* ############################################### ::: OS 체크함수 ::: 사용방법 : ckOs(); ex) $os = ckOs(); ############################################### 조회(3611)          



  브라우저 체크함수
php에서 브라우저를 체크 하는 함 수입니다. /* ############################################### ::: 브라우저 체크함수 ::: 사용방법 : ckBrowser(); ex) $browser = ckBrowser(); ############################조회(3841)          



  php 함수적용
class Func{ /////////////////// DB 관련 /////////////////////// ##############################1############################### # DB 접속 정보를 가지고 있는 화일을 인쿠루드 시키고, 그의 변수 값들을 # 넘기면 된다. # DB 접속 부분 성공 1반환조회(1912)          



  유용한 일반 함수
//단어 필터링 function filter($string,$filter = "",$type = "change",$change = "###") { if(!$filter) return $string; $filter = explode(",",$filter); $fcount = sizeof($filter); for((홈마스타)     조회(1825)          



  phpinfo 에서 system, php버전, Ze
(홈마스타)     댓글(1)     조회(2377)          



  웹사이트 개발시 제가 자주쓰는 클래스
class Func{ /////////////////// DB 관련 /////////////////////// ##############################1############################### # DB 접속 정보를 가지고 있는 화일을 인쿠루드 시키고, 그의 변수 값들을 # 넘기면 된다. (홈마스타)     댓글(1)     조회(1837)          



   입력내용중 URL부분을 자동링크로 반환하기
(나는2)     조회(2153)          



  다양한 Alert(); 함수화
function Alert($mode,$Msg=0,$location=0){ if ( $mode == "Back" ) { print (" alert(\"$Msg\"); history.go(-1);"); } else if ( $mode == "AutoClose" ) { print (" window.self.close((홈마스타)     조회(2076)          




≪ [1]  [2]   ≫

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


 
최근 글
[손님]
164
292
505
301
313
194
280
3276
870
888
1070
911
4181
3481
3542
 
인기 글
[손님]
3249
3161
5202
5310
3026
3070
3097
3276
  [홈마스타] oledb 접근 오류
4584
  [새로미] 태그의 >
3264
4993
3404
4002
3215
3159