Today I Learned …
[웹개발] 한글 종성 유무의 검증 본문
* 개인적인 공부 내용을 기록한 글입니다.
사담
친구 웹 만들다가... 급 꽂혀서 구현해봤다.
한글 종성 유무의 검증
평화로운 웹개발 중...
[2]으로 검색한 결과입니다.
[나무]으로 검색한 결과입니다.
갑자기 확 거슬리기 시작했다...
그런고로 열심히 뒤져서 구현해봤다.
전체 코드
$last = iconv_substr($search, -1, 1, "utf-8");
$dec = substr(mb_convert_encoding($last,'HTML-ENTITIES','UTF-8'),2,-1);
$nums = array("3","6","0");
if($dec>=44032 && $dec<=55203){
if(($dec-44032)%28!=0){
$josa = "으로";
}else{
$josa = "로";
}
}elseif(in_array($last, $nums)){
$josa = "으로";
}else{
$josa = "로";
}
한 줄 씩 뜯어보기
$last = iconv_substr($search, -1, 1, "utf-8");
⇒ 검색어의 마지막 글자를 가져온다. 한글을 있는 그대로 자르려면 iconv_substr를 사용해주어야 한다.
$dec = substr(mb_convert_encoding($last,'HTML-ENTITIES','UTF-8'),2,-1);
⇒ $last를 10진수로 바꿔준다.
$nums = array("3","6","0");
⇒ 발음할 때 삼, 육, 십이 되는 친구들도 배열에 넣어준다.
* 받침이 있지만 제외된 숫자들이 있다. 직접 발음해보면 이유를 알 수 있다...
if($dec>=44032 && $dec<=55203)
⇒ 해당 문자가 한글이라면, 다음의 검증을 수행한다.
if(($dec-0xAC00)%28!=0)
⇒ 해당 문자에서 44032을 뺀 값이 28로 나누어 떨어지지 않는다면 → 받침이 있는 글자이다.
* 유니코드 = 44032 + (초성 * 21 + 중성) * 28 + 종성
따라서 종성이 있는 글자는 유니코드-44032를 28로 나누었을 때 나머지가 남게 된다.
참고로 위 공식에서의 초성, 중성, 종성은 각 자모의 Index를 말한다.
$josa = "으로" / $josa = "로"
⇒ 경우에 따라 조사의 형태를 정해준다.
결과


'Web > APM' 카테고리의 다른 글
[웹개발] 웹 호스팅으로 내 웹을 올려보자! (끝) : MySql DB 사용하기 (feat. 카페24) (2) | 2021.12.26 |
---|---|
[웹개발] 웹 호스팅으로 내 웹을 올려보자! (1) : 웹 페이지 올리기 (feat. 카페24) (6) | 2021.12.26 |
[웹개발] 주소 검색 기능 (끝) : 주소 검색 로직 구현 (0) | 2021.11.16 |
[웹개발] 주소 검색 기능 (1) : 주소 DB 자체 구축 (MySql) (0) | 2021.11.16 |
[웹개발] 게시글 검색 기능 (기간 설정 포함) (0) | 2021.11.15 |