Eliminate Korean MySql function

CREATE DEFINER=`cosmos`@`%` FUNCTION `onlyHanja`(`iName` text )

RETURNS varchar(4000) CHARSET utf8

LANGUAGE SQL

NOT DETERMINISTIC

CONTAINS SQL

SQL SECURITY DEFINER

COMMENT

BEGIN

declare iChar varchar(1);

declare oName text;

declare i INT DEFAULT 1;

SET oName = iName;

WHILE i <= length(iName) DO

SET iChar = SUBSTRING(iName,i,1) ;

IF iChar between ‘가’ and ‘힣’ THEN

SET oName = replace(oName,iChar,) ;

END IF ;

SET i = i + 1;

END WHILE;

SET oName = replace(oName,‘(‘,);

SET oName = replace(oName,‘)’,);

RETURN (oName);

END

korean hanja 구분

문자코드 구분

완성형 코드표에서 한글과 한자의 영역은 다음과 같습니다.

Quote:
완성형 글자 코드의 한글 영역: xxyyh (xx: B0h ~ C8h, yy: A1h ~ FEh)
완성형 글자 코드의 한자 영역: xxyyh (xx: CAh ~ FDh, yy: A1h ~ FEh)

따라서 글자가 한글인지 확인하려면 위의 두 범위 내에 드는지를 채크해 보면 되겠습니다. 참고로 다른 종류의 문자의 영역들은 다음과 같습니다. ‘a’, ‘+’같은 1바이트 문자(반각)는 여기에 포함되지 않습니다. 보기에는 같은 글자라도 2바이트 문자(전각)인 ‘a’, ‘+’와 1바이트 문자(반각)인 ‘a’, ‘+’는 전혀 틀린 문자입니다.

Quote:
A1A1h ~ A2E5h: 기호와 약자 몇가지
A3A1h ~ A3FEh: 전각 문자
A4A1h ~ A4FEh: 한글자모
A5A1h ~ A5AAh: 소문자 로마숫자 (i~x)
A5B0h ~ A5B9h: 대문자 로마숫자 (I ~ X)
A5C1h ~ A5D8h: 대문자 그리스 문자
A5E1h ~ A5F8h: 소문자 그리스 문자
A6A1h ~ A6E4h: 라인 문자
A7A1h ~ A7EFh: 단위
A8A1h ~ A8B0h: 대문자 발음기호
A8B1h ~ A8BEh: 원문자 한글 자음 (ㄱ~ㅎ)
A8BFh ~ A8CCh: 원문자 가나다 (가~하)
A8CDh ~ A8E6h: 원문자 영문 소문자 (a~z)
A8E7h ~ A8F5h: 원문자 숫자 (1~15)
A8B1h ~ A8BEh: 분수 (1/2, 1/3, 2/3, 1/4, 3/4, 1/8, 3/8, 5/8, 7/8)
A9A1h ~ A9B0h: 소문자 발음기호
A9B1h ~ A9BEh: 괄호문자 한글 자음 (ㄱ~ㅎ)
A9BFh ~ A9CCh: 괄호문자 가나다 (가~하)
A9CDh ~ A9E6h: 괄호문자 영문 소문자 (a~z)
A9E7h ~ A9F5h: 괄호문자 숫자 (1~15)
A9B1h ~ A9BEh: 위, 아래첨자 (1, 2, 3, 4, n, 1, 2, 3, 4)
ABA1h ~ ABF3h: 가타카나
ABA1h ~ ABF6h: 히라가나
ACA1h ~ ACC1h: 키릴 문자 대문자
ACD1h ~ ACF1h: 키릴 문자 소문자

예전에 만들어 두었던 게임에서 캐릭터 이름 등을 입력받아 유효성을 체크하는 필터 소스이다.

아스키에서의 특수문자 확인

Code:
enum
{
ERROR_NAME_OK,                                // OK
ERROR_NAME_MAX_LENGTH,                // 문자열 길이 초과.
ERROR_NAME_MIN_LENGTH,                // 문자열이 너무 짧음.
ERROR_NAME_SPECIAL_CODE,        // 특수코드 사용.
ERROR_NAME_VALUE,                        // 숫자 사용.
ERROR_NAME_BLINK_MORE,                // 공백 중복 사용.
};

int Check_Filter_Name( const char* buffer, int minLen, int maxLen )
{
int len = strlen(buffer);

// 길이 검사
// if( len > NAME_LEN )
if( len >= maxLen )
return ERROR_NAME_MAX_LENGTH;
else if( len < minLen )
return ERROR_NAME_MIN_LENGTH;

// 특수문자 검사
for( int x=0; x<len; ++x )
{
if( ((unsigned char)buffer[x]>= 0xB0 ) &&
((unsigned char)buffer[x] <= 0xC8 ) &&
((unsigned char)buffer[x+1] >= 0xA1) &&
((unsigned char)buffer[x+1] <= 0xFE ))
{
// 한글 해당 부분
x++;
continue;
}
else if( ( (unsigned char)buffer[x] >= 0xCA ) &&
( (unsigned char)buffer[x] <= 0xFD ) &&
( (unsigned char)buffer[x+1] >= 0xA1 ) &&
( (unsigned char)buffer[x+1] <= 0xFE) )
{
// 한자 해당 부분
return ERROR_NAME_SPECIAL_CODE;
}
else if ( ( ( (unsigned char)buffer[x] >= 0x41 ) &&
( (unsigned char)buffer[x] <= 0x5A ) ) ||
( ( (unsigned char)buffer[x] >= 0x61 ) &&
( (unsigned char)buffer[x] <= 0x7A) ) )
{
// 영어 해당 부분
continue;
}
else if ( ( buffer[x]>= ‘0’ ) && ( buffer[x] <= ‘9’ ) )
{
// 숫자 처리 부분
continue;
}
else if(( (unsigned char)buffer[x]>= 0xA1 ) &&
( (unsigned char)buffer[x+1] >= 0xA1 ) )
{
// 2byte special char
return ERROR_NAME_SPECIAL_CODE;
}
else
{
// 1byte special character
return ERROR_NAME_SPECIAL_CODE;
}
}

return ERROR_NAME_OK;
}

유니코드에서의 특수문자 확인 (영어, 숫자,완성된 한글을 제외하고 거르기

Code:
int len = (int)strSource.size();
for(int i = 0; i < len; i++)
{
// 숫자
if(strSource[i] >= 0x0030 && strSource[i] <= 0x0039)
continue;
// 영어 대소문자
else if( (strSource[i] >= 0x0041 && strSource[i] <= 0x005a) ||
(strSource[i] >= 0x0061 && strSource[i] <= 0x007a))
continue;
// 한글
else if((strSource[i] >= 0xAC00 && strSource[i] <= 0xD7A3))
continue;
else
return false;

// 현재는 숫자,영어,한글자로 완성된 한글만을 검색한다. ㅎㅎㅎ 같은것도 안됨.
// 한글 자모      1100 ~ 11FF
// 한글 호환 자모 3130 ~ 318F
// ㅎㅎ 이나 ㅋㅋㅋㅋ 같은 단어도 막을려면..
// 한글 자모 나 호환 자모로 사용하려면 따로 처리해야 한다.
}

_________________

MySQL broken Korean (UTF8)

MySQL 한글깨짐현상 제거 ( UTF8 )

한글이나 한자가 테이블상에서 깨져보임.
DB에 들어간 데이터를 확인하면 ??와 같이 깨져보임.

-> 이유 : 해당 table의 칼럼이 utf8로 지정되지 않아서 생기는 현상.

1. Mysql characterset을 utf8로 변경

/etc/my.cnf에 아래 내용 추가
————————————
[mysql]
default-character-set = utf8

[client]
default-character-set = utf8

[mysqld]
character-set-client-handshake=FALSE
init_connect=”SET collation_connection = utf8_general_ci”
init_connect=”SET NAMES utf8″
character-set-server = utf8
collation-server = utf8_general_ci

[mysqldump]
default-character-set = utf8
————————————

2. 테이블의 캐릭터셋을 변경하는 방법

ALTER TABLE table_name convert to charset utf8;

3. jdbc 접속정보에 utf8로 접속하도록 파라미터를 추가한다.

jdbcUrl=”jdbc:mysql://localhost/dbname?useUnicode=yes&amp;characterEncoding=UTF-8&amp;autoReconnect=true”

asp 2 dimension array

Dim arr(3, 4)
‘4행 5열 배열
‘0부터 시작하므로 행은 0,1,2,3까지 총 4행
‘0부터 시작하므로 열은 0,1,2,3,4 까지 총 5열

numrows = UBound(arr, 1) ‘행
numcols = UBound(arr, 2) ‘열
cnt = 0

For i = 0 To numrows ‘행
For j = 0 To numcols ‘열
arr(i, j) = cnt
‘ response.write “{“& i &”,”&j&”}”
Response.Write(“{ ” & arr(i, j) & ” }”)
cntcnt = cnt + 1
Next
Response.Write(“<br /><br />”)
Next

javascript 2 dimesion array definition

var myArray = new Array( new Array(), new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array() );

myArray[0][0] = 1;
myArray[0][1] = 43;
myArray[0][2] = 14;
myArray[0][3] = 34;
myArray[0][4] = 9;
myArray[0][5] = 5;
myArray[0][6] = 26;
myArray[0][7] = 11;

myArray[1][0] = 10;
myArray[1][1] = 58;
myArray[1][2] = 38;
myArray[1][3] = 54;
myArray[1][4] = 61;
myArray[1][5] = 60;
myArray[1][6] = 41;
myArray[1][7] = 19;

myArray[2][0] = 13;
myArray[2][1] = 49;
myArray[2][2] = 30;
myArray[2][3] = 55;
myArray[2][4] = 37;
myArray[2][5] = 63;
myArray[2][6] = 22;
myArray[2][7] = 36;

myArray[3][0] = 25;
myArray[3][1] = 17;
myArray[3][2] = 21;
myArray[3][3] = 51;
myArray[3][4] = 42;
myArray[3][5] = 3;
myArray[3][6] = 27;
myArray[3][7] = 24;

myArray[4][0] = 44;
myArray[4][1] = 28;
myArray[4][2] = 50;
myArray[4][3] = 32;
myArray[4][4] = 57;
myArray[4][5] = 48;
myArray[4][6] = 18;
myArray[4][7] = 46;

myArray[5][0] = 6;
myArray[5][1] = 47;
myArray[5][2] = 64;
myArray[5][3] = 40;
myArray[5][4] = 59;
myArray[5][5] = 29;
myArray[5][6] = 4;
myArray[5][7] = 7;

myArray[6][0] = 33;
myArray[6][1] = 31;
myArray[6][2] = 56;
myArray[6][3] = 62;
myArray[6][4] = 53;
myArray[6][5] = 39;
myArray[6][6] = 52;
myArray[6][7] = 15;

myArray[7][0] = 12;
myArray[7][1] = 45;
myArray[7][2] = 35;
myArray[7][3] = 16;
myArray[7][4] = 20;
myArray[7][5] = 8;
myArray[7][6] = 23;
myArray[7][7] = 2;

for (i = 0; i < myArray.length ;i++ )
{
var s = 0;
var n = 0;
for (j = 0; j < myArray[i].length ;j++ )
{
document.write(myArray[i][j]) ;
s = s + myArray[i][j];
n = n + myArray[j][i];

}
document.write(” : ” + n );
document.write(” = ” + s +”<br>”);

}

bar of changes

천(天)

지(地)

수(水)

산(山)

풍(風)

화(火)

뢰(雷)

택(澤)

천(天)

1
중천건

11
지천태

5
수천수

26
산천대축

9
풍천소축

14
화천대유

34
뇌천대장

43
택천쾌

지(地)

12
천지비

2
중지곤

8
수지비

23
산지박

20
풍지관

35
화지진

16
뇌지예

45
택지췌

수(水)

6
천수송

7
지수사

29
중수감

4
산수몽

59
풍수환

64
화수미제

40
뇌수해

47
택수곤

산(山)

33
천산돈

15
지산겸

39
수산건

52
중산간

53
풍산점

56
화산려

62
뇌산 소과

31
택산함

풍(風)

44
천풍구

46
지풍승

48
수풍정

18
산풍고

57
중풍손

50
화풍정

32
뇌풍항

28
택풍대과

화(火)

13
천화동인

36
지화명이

63
수화기제

22
산화비

37
풍화가인

30
중화리

55
뇌화풍

49
택화혁

뢰(雷)

25
천뢰무망

24
지뢰복

3
수뢰둔

27
산뢰이

42
풍뢰익

21
화뢰서합

51
중뢰진

17
택뢰수

택(澤)

10
천택리

19
지택 임

60
수택절

41
산택손

61
풍택중부

38
화택규

54
뇌택귀매

58
중택태