유니코드 문자열을 넘겨받아서 한글이 포함되어 있는지 여부를 판별하는 함수.
한글에 해당하는 유니코드 문자범위가 있으니 요리조리 활용가능.
이 정도면 세종대왕의 콧김이라도 한 번 스친 문자는 다 가져온 것 같은데 더 있을라나.
EUC-KR일 경우 한글이 아니라고 나오므로 인코딩을 모르는 한글을 포함한 문자열이 UTF-8인지 EUC-KR인지 체크하는 용도로도 사용가능함.
function 한글인가($문자열)
{
$hangul_unicode_array = array(
// 한글 자모
// http://www.unicode.org/charts/PDF/U1100.pdf
// 0xE1 0x84 0x80 ~ 0xE1 0x87 0xBF
'\x{1100}-\x{11FF}',
// 한글 자모 확장-A
// http://www.unicode.org/charts/PDF/UA960.pdf
// 0xEA 0xA5 0xA0 ~ 0xEA 0xA5 0xBF
'\x{A960}-\x{A97F}',
// 한글 자모 확장-B
// http://www.unicode.org/charts/PDF/UD7B0.pdf
// 0xED 0x9E 0xB0 ~ 0xED 0x9F 0xBF
'\x{D7B0}-\x{D7FF}',
// 호환용 한글 자모
// http://www.unicode.org/charts/PDF/U3130.pdf
// 0xE3 0x84 0xB0 ~ 0xE3 0x86 0x8F
'\x{3130}-\x{318F}',
// 반각/전각 모양 중 한글부분
// http://www.unicode.org/charts/PDF/UFF00.pdf
// 0xEF 0xBE 0xA1 ~ 0xEF 0xBF 0x9C
'\x{FFA1}-\x{FFDC}',
// 한글 소리 마디
// http://www.unicode.org/charts/PDF/UAC00.pdf
// 0xEA 0xB0 0x80 ~ 0xED 0x9E 0xAF
'\x{AC00}-\x{D7AF}'
);
$hangul_pattern = implode($hangul_unicode_array);
return preg_match("/[".$hangul_pattern."]/u", $문자열)==1;
}
var_dump(한글인가('not hangul')); // false
var_dump(한글인가('한글이다')); // true
[참조]
유니코드 위키피디아 : http://ko.wikipedia.org/wiki/%EB%B6%84%EB%A5%98:%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_%EB%AA%A9%EB%A1%9D
유니코드 언어별 정리 : http://www.unicode.org/charts/
'PHP' 카테고리의 다른 글
[PHP] 부동소수점 비교연산 (0) | 2013.11.18 |
---|---|
[PHP] PHP 소스코드로 MongoDB의 sh.status (db.printShardingStatus) 정보 출력하기 (php, MongoDB, sh.status, db.printShardingStatus) (0) | 2013.11.04 |
[PHP] 소스 레벨에서 표준 I/O 스트림 리다이렉트 (STDIN, STDOUT, STDERR redirect) (0) | 2013.08.19 |
[PHP] json_encode 할 때 'Invalid UTF-8 sequence in argument' warning (6) | 2013.07.04 |
[PHP] PHP에서 STDERR 로 출력하는 법. (0) | 2013.03.15 |