한글 종성 유무의 판별
1. 전체 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$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 = "로";
}
2. 한 줄 씩 뜯어보기
- 검색어의 마지막 글자를 가져온다. 한글을 있는 그대로 자르려면 iconv_substr를 사용해주어야 한다.
1
$last = iconv_substr($search, -1, 1, "utf-8");
- $last를 10진수로 바꿔준다.
1
$dec = substr(mb_convert_encoding($last,'HTML-ENTITIES','UTF-8'),2,-1);
- 발음할 때 삼, 육, 십이 되는 숫자를 배열에 넣어준다.
1
$nums = array("3","6","0");
- 해당 문자가 한글인지 판별한다.
1
if($dec>=44032 && $dec<=55203)
- 해당 문자에서 44032을 뺀 값이 28로 나누어 떨어지지 않는다면 → 받침이 있는 글자이다.
1
if(($dec-44032)%28!=0)
유니코드 = 44032 + (초성 * 21 + 중성) * 28 + 종성
따라서 종성이 있는 글자는 유니코드-44032를 28로 나누었을 때 나머지가 남게 된다.
참고로 위 공식에서의 초성, 중성, 종성은 각 자모의 Index를 말한다.
- 경우에 따른 조사의 형태를 정해준다.
1
$josa = "으로" / $josa = "로"