mysql_real_escape_string(이하 MRES)는 서버와 클라이언트간의 케릭터 셋에 따라 인풋값을 적절히 이스케이핑 해주는 함수이다. mysql_escape_string(이하 MES)이 연결정보를 확인하지 않기에 PHP 4.3.0부터 추가된 함수이다.
그러나...
DB도 UTF8이고 접속할 때 "SET CHARACTER SET 'utf8'"을 넣어주고 난리를 쳐도 환경에 따라서 저놈이 이상한 짓을 할때가 있다. "ㅋㅋㅋ"라는 한글을 입력하였을 때 "\ㅋ\ㅋ\ㅋ"라고 나타난다면 바로 이 상황인 것이다.
현재 추측하기로는 서버의 셋팅이 한번 euckr 등으로 고정되면 어떠한 짓으로도 이게 변환이 안되어 MRES가 utf8 문자들을 이스케이핑 해 주는 것으로 보인다.
만약 Table의 컬럼이 모두 utf8로 셋팅되어 있고 입력 값이 utf8임이 틀림없다고 자신한다면 MES 함수를 사용하는 것이 좋을 것이다. 물론 MRES를 사용하는 것이 좋겠기에 문제가 생길때만 변경하고 싶다면...
그러나...
DB도 UTF8이고 접속할 때 "SET CHARACTER SET 'utf8'"을 넣어주고 난리를 쳐도 환경에 따라서 저놈이 이상한 짓을 할때가 있다. "ㅋㅋㅋ"라는 한글을 입력하였을 때 "\ㅋ\ㅋ\ㅋ"라고 나타난다면 바로 이 상황인 것이다.
현재 추측하기로는 서버의 셋팅이 한번 euckr 등으로 고정되면 어떠한 짓으로도 이게 변환이 안되어 MRES가 utf8 문자들을 이스케이핑 해 주는 것으로 보인다.
만약 Table의 컬럼이 모두 utf8로 셋팅되어 있고 입력 값이 utf8임이 틀림없다고 자신한다면 MES 함수를 사용하는 것이 좋을 것이다. 물론 MRES를 사용하는 것이 좋겠기에 문제가 생길때만 변경하고 싶다면...
mysql_real_escape_string('ㅋ') == 'ㅋ'이 조건식으로 테스트를 해 보면 된다. 물론 코드는 utf-8 without BOM으로 저장해야 한다. 코드 65001. 그리고 저 함수는 DB 연결이 일어난 이후에 사용해야 됨에 유의.
'개발&Development > 웹' 카테고리의 다른 글
미디어 태그 (3) | 2006.11.17 |
---|---|
이럴수가! (0) | 2006.11.15 |
"know where" to "know keyword" (1) | 2006.08.23 |
Structural Markup and Design (0) | 2006.03.30 |
Professional Ajax (1) | 2006.03.30 |