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를 사용하는 것이 좋겠기에 문제가 생길때만 변경하고 싶다면...

mysql_real_escape_string('ㅋ') == 'ㅋ'
이 조건식으로 테스트를 해 보면 된다. 물론 코드는 utf-8 without BOM으로 저장해야 한다. 코드 65001. 그리고 저 함수는 DB 연결이 일어난 이후에 사용해야 됨에 유의.

'개발&Development > ' 카테고리의 다른 글

미디어 태그  (3) 2006.11.17
이럴수가!  (0) 2006.11.15
mysql_real_escape_string의 황당한 시츄에이션  (1) 2006.10.30
"know where" to "know keyword"  (1) 2006.08.23
Structural Markup and Design  (0) 2006.03.30
Professional Ajax  (1) 2006.03.30
  1. Commented by 드렁크수달 at 2009.02.05 05:41

    저도 이런 황당한 시추에이션에 경험하고 있네요 환경이 모두다 UTF-8 환경인데 이걸 TAG mysql_real_escape_string 써주면 /ㅎ/ㅎ 이런식으로 변해서 전 빼주었네요 ^^ 좋은 정보 감사합니다.