유니코드 문자열을 넘겨받아서 한글이 포함되어 있는지 여부를 판별하는 함수.

한글에 해당하는 유니코드 문자범위가 있으니 요리조리 활용가능.

이 정도면 세종대왕의 콧김이라도 한 번 스친 문자는 다 가져온 것 같은데 더 있을라나.


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/








Posted by bloodguy
,