태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

알쯔의 외부기억장치

Ajax를 이용한 키워드 자동완성을 만들며, 초성만 입력했을때도 해당되는 키워드를 가져오기 위해, 삽질끝에 만든 한글을 초.중.종성으로 분리하기 함수입니다. :)
인터넷에 퍼져있는 유니코드와 관련된 정보를 모아다가 짜집기로 만든거라, 허접할 수 있음을 미리 공지합니다. ^^;;

일단 작동방식은 [알쯔's 외부기억장치(http://blog.arzz.com)](UTF-8)과 같은 문장을 함수에 넣으면 [ㅇㅏㄹㅉㅡ'sㅇㅚㅂㅜㄱㅣㅇㅓㄱㅈㅏㅇㅊㅣ(http://blog.arzz.com)] 와 같은 문자열을 반환합니다.

즉, 한글일 경우, 자음과 모음, 그리고 받침을 따로 분리하고, 한글외의 문자열은 그대로 반환하며, 띄워쓰기는 무시합니다.
띄워쓰기도 그대도 반환하실려면, 함수 제일 아래쪽의 $splitStr = str_replace(' ','',$splitStr); 부분을 지워주시면 됩니다.


<?php
function GetUtf8String($str) {
	$arr_cho = array("ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ","ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ","ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ");
	$arr_jung = array("ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ","ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ","ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ");
	$arr_jong = array("", "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ","ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ","ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ","ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ");

	$unicode = array();
	$values = array();
	$lookingFor = 1;

	for ($i=0, $loop=strlen($str);$i<$loop;$i++) {
		$thisValue = ord($str[$i]);

		if ($thisValue < 128) {
			$unicode[] = $thisValue;
		} else {
			if (count($values) == 0) $lookingFor = $thisValue < 224 ? 2 : 3;
			$values[] = $thisValue;

			if (count($values) == $lookingFor) {
				$number = $lookingFor == 3 ? (($values[0]%16)*4096)+(($values[1]%64)*64)+($values[2]%64) : (($values[0]%32)*64)+($values[1]%64);
				$unicode[] = $number;
				$values = array();
				$lookingFor = 1;
			}
		}
	}

	$splitStr = '';
	while (list($key,$code) = each($unicode)) {
		if ($code >= 44032 && $code <= 55203) {
			$temp = $code-44032;

			$cho = (int)($temp/21/28);
			$jung = (int)(($temp%(21*28)/28));
			$jong = (int)($temp%28);

			$splitStr.= $arr_cho[$cho].$arr_jung[$jung].$arr_jong[$jong];
		} else {
			$temp = array($unicode[$key]);

			foreach ($temp as $ununicode) {
				if ($ununicode < 128) {
					$splitStr.= chr($ununicode);
				} elseif ($ununicode < 2048) {
					$splitStr.= chr(192+(($ununicode-($ununicode%64))/64));
					$splitStr.= chr(128+($ununicode%64));
				} else {
					$splitStr.= chr(224+(($ununicode-($ununicode%4096))/4096));
					$splitStr.= chr(128+((($ununicode%4096)-($ununicode%64))/64));
					$splitStr.= chr(128+($ununicode%64));
				}
			}
		}
	}
	$splitStr = str_replace(' ','',$splitStr);

	return $splitStr;
}

// UTF-8 문자열 생성
$str = iconv('euc-kr','utf-8','알쯔\'s 외부기억장치');

echo GetUtf8String($str);
// return ㅇㅏㄹㅉㅡ'sㅇㅚㅂㅜㄱㅣㅇㅓㄱ ㅈㅏㅇㅊㅣ(http://blog.arzz.com)
?>
Posted by 알쯔
이럴땐, 이렇게!/프로그래밍 l 2006/02/04 16:52

TRACKBACK :: http://blog.arzz.com/trackback/192 관련글 쓰기

댓글을 달아 주세요

  1. 스완  댓글주소  수정/삭제  댓글쓰기

    와... 직접 만드신거군요 : )
    대단하십니다 +_+ 고칠점은 모르겠지만, 잘쓰겠습니다 : )

    2006/02/04 23:32
  2.  댓글주소  수정/삭제  댓글쓰기

    비밀댓글 입니다

    2006/02/04 23:45
  3. BlogIcon 하울  댓글주소  수정/삭제  댓글쓰기

    알쯔님 함수 좋은데요. 만드신다고 수고하셨습니다.
    오픈유어북에 만드신 함수 가져다 붙였는데 괜찮죠? ^^
    그럼 항상 건강하시고 행복하세요!!!

    2006/02/11 03:26
    • BlogIcon 알쯔  댓글주소  수정/삭제

      넵- 가져가서 사용하라고 공개한것인데 안 괜찮을리가;; ^^;; 잘 사용해주시면 너무 감사하구요~
      하울님도 건강하시고- 감기조심하세요 ^^;

      2006/02/13 13:11
  4. 태양공원  댓글주소  수정/삭제  댓글쓰기

    먼저, 좋은 함수 만드느라 수고하셨구요
    근데 공백을 반영하기 위해 공백제거 하는 부분을 주석처리하고 처리했는데 문제가 발생했습니다.
    원단어의 띄어쓰기와 다르게 띄어쓰기 형태로 분리되더군요

    "마 추섬의 비극" 이라는 단어를 분리했을때 초중성 분리는 잘 되는데 띄어쓰기가 "마 추섬 의 비극" 이런식으로 돼요
    물론 대부분의 단어는 잘 되지만 이 단어뿐 아니라 다른 많은 단어들이 띄어쓰기가 다르게 돼요.. 왜그럴까요?

    2006/02/17 10:42
    • BlogIcon 알쯔  댓글주소  수정/삭제

      흠... 그부분에 대해서는 저도 잘 모르겠네요 :)
      시간날때 한번더 뜯어봐야할듯 하네요 ㅠㅠ

      2006/02/24 03:50
  5. BlogIcon 까비  댓글주소  수정/삭제  댓글쓰기

    아... 올블로그 딱지가 이럴 때 좋네요. ^^; '한글' 딱지를 붙여서 글을 하나 쓰고 링크를 따라오다 보게 됐습니다.

    참고로, Ajax에서 다루신다면 자바스크립트로 직접 한글을 다루는게 짧은 코드로 처리가 가능해서 좋습니다. UTF-8이든 EUC-KR이든 가리지 않고 바로 유니코드를 뱉어 주더라구요. (http://tody.teoal.net/archives/119)

    php로 해야한다면... MoniWiki에 비슷하게 구현이 되어 있을거 같네요.

    2006/02/22 13:58
    • BlogIcon 알쯔  댓글주소  수정/삭제

      딱지라고 하셔서 순간 무엇인가 했답니다... 태그를 말씀하신듯 하네요-
      그리고 말씀해주신, 자바스크립트로 구현하는 부분... 좋은 공부가 되었구요.
      이번같은 경우는, 한글분리가 목적이라기보단, DB에 커넥팅해서, 쿼리값을 받아오는게 목적이었다보니, 직접 DB에 접근할 수 있는 PHP로 하는게 나을듯 해서... ^^;;

      2006/02/24 03:52
  6. BlogIcon 길이  댓글주소  수정/삭제  댓글쓰기

    공백반영시 위의 소스를 그대로 사용할 경우... "태양공원"님의 말씀처럼 몇몇 단어들이 공백오류를 일으키는데요... 받침"ㅁ"이 들어가는 단어들이 문제가 됩니다.
    이유는 $arr_jong 배열의 "ㅁ"부분뒤에.. 공백이 하나 숨어 있습니다. 그걸 제거하시면 해결이 될껍니다. ^^

    2006/09/01 20:11
  7. 드렁크수달스  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 이걸보고 응용좀해봐야 겠습니다.

    2006/12/08 13:39

1  ... 189 190 191 192 193 194 195 196 197  ... 383 

카테고리

분류 전체보기 (383)
프로필 (2)
일상이야기 (215)
세상바라보기 (9)
미디어로그 (16)
주절거림 (56)
엔터테인먼트로그 (17)
이럴땐, 이렇게! (49)
개발항해록 (19)

달력

«   2010/08   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31