본문 바로가기

Web/PHP

한글의 조사 범위

한글코드의 범위 조사.. (in linux) 조회수:180





완전한 팁은 아닙니다. 팁이라기 보다는 연구용이구요. (질문인가.. ?)
코멘트 주시면 수정해서 다시 올리던가, 삭제하던가 하겠습니다.
이렇게까지 하는 이유는 팁&텍 다 뒤져도 만족한 결과가 없기 때문입니다.
한글코드가 늦은밤을 붙잡는군요.

한글검사를 위해 정규표현식으로 가-힣 을 이용하거나
[\xA1-\xFE][\xA1-\xFE] 등등을 이용할 수 있다는 팁은
여러번 나왔습니다.
그런데 둘 다 문제가 있었습니다.
가-힣은 유니코드에서는 잘 통과됩니다. 즉, (ie에서) 자바스크립트 등에서..
그러나 리눅스에서는 유니코드처리가 안되어 있어서 (이부분 확실하겠죠 ?)
간단히 '한' 이란 글자만 해도 그 범위에 들지 않더라구요.
리눅스에 유니코드 처리를 할 수 있는 방법이 있을 것 같기도 하지만..
[\xA1-\xFE][\xA1-\xFE]
의 경우도 처리하지 못하는 문자가 있습니다. 이유는 아래 설명될
한글의 코드범위가 다르기 때문입니다.
(이하는, 그냥 모두 16진수 표기로 이해해 주세요)

그래서 아예 한글코드 범위를 조사해 보았습니다.
아래는 그 코드이고, 결과적으로 8141 (갂) 부터 c8fe (힣) 이면
충분히 커버되는 것 같습니다.
첫번째바이트 81~c8,
두번째 바이트는 41~fe 인 경우만 한글이 발견되었습니다. (--; 노가다..)

즉,
[\x81-\xC8][\x41-\xFE] 이렇게 하면 범위에 모든 한글이 들어가는 듯 싶습니다.
이 코드범위의 전체 갯수는 13680 개로, 비어있는 코드를 감안하면
조합형 한글코드범위인 11172 자와 비슷하게 맞다는 것을 알 수 있고..
시간관계상 일일이 확인하진 않았습니다. -_-;

테스트 결과 잘 작동하였습니다.

///////////////////////////////// phpschool tip&tech 2004-04-21 jeon
//테스트
$regHan ='/([\x81-\xc8][\x41-\xFE])+$/';
$regHan ='/([\x81-\xc8][\x41-\xFE])/';
$str = "a햏한하하sks";
echo preg_match($regHan, $str,$match);
print_r($match);

//코드범위를 조사하는 데 사용한 코드:
$cnt = 0; $cnt_limit = 20000;
for($i=0x81;$i<=0xc8;$i++) {
    for($j=0x41;$j<=0xfe;$j++) {

        ++$cnt;

        $c = sprintf("%x%x",$i,$j);

        $chr = chr($i) . chr($j);

        echo("$cnt : $c: $chr<br>");

        if($cnt==$cnt_limit) break;
    }
    if($cnt==$cnt_limit) break;
}

return;
///////////////////////////////// phpschool tip&tech 2004-04-21 jeon

한글 코드체계 분야의 고수분들께 지도 부탁드립니다.

-- jeon.






웹서퍼 기본 완성형 코드: 0xB0A1 ~ 0xC8FE (2350 자)
확장 완성형 코드: 0x8141 ~ 0xC65A (8822 자)

http://doc.ddart.net/hangul/hangulcode.html

'Web > PHP' 카테고리의 다른 글

$_SERVER  (0) 2013.09.26
카운터 정보 가져오기  (0) 2013.09.26
마지막에 문자 제거  (0) 2013.09.26
config 파일 리스트 방식으로 생성  (0) 2013.09.26
사이트 맵 처리 (이미지)  (0) 2013.09.26