Skip to content

?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

addslashes()
  -용도: 작은따옴표 큰따옴표와 같은 특정문자 앞에 역슬래시 문자를 붙인다.
  -방법: addslashes()
  *stripslashes()
  -용도: allslashes로 역슬래시 처리된 문자를 원상태로 되돌린다.
  -방법: stripslashes()

  addslashes - 문자열에 슬래쉬를 덧붙입니다.
  string addslashes( string str )
  데이터베이스 쿼리등에서 처리할 필요가 있는 문자 앞에 백슬래쉬를 붙인 문자열을 반환합니다.
  이 문자들은 작은 따옴표('), 큰따옴표("),백슬래쉬(\), NUL(NULL 바이트)입니다.
  addslashes()를 사용하는 대표적인 예는 데이터베이스에 데이터를 넣을 때 입니다.
  예를 들어, 데이터베이스에 O'reilly라는 이름을 넣으려고 할 때, 이스케이프할 필요가 있습니다.
  대부분의 데이터베이스는 \를 사용하기에 O\'reilly가 되어야 합니다.
  이 데이터를 데이터베이스에 넣으면 추가한 \은 저장되지 않습니다.
  PHP 지시어 magic_quotes_sybase를 on으로 설정하면 '은 '을 이용하여 이스케이프합니다.

  PHP 지시어 magic_quotes_gpc는 기본값으로 onl이고, 자동적으로 모든 GET, POST, COOKIE 데이터에
  addslashes()를 실행합니다.
  magic_quotes_gpc로 이스케이프된 문자열에 addslashes()를 사용하지 마십시요.
  그렇지 않으면 두번 이스케이프하게 됩니다.
  이를 확인 하기 위해서는 get_magic_quotes_gps()를 사용할 수 있습니다.
  
  example : 데이터베이스에 INSERT할 문장
            I'm sorry to bother you

  1. INSERT INTO WORDBOOK_SV(word_name)
                      VALUES('I'm sorry to bother you')
     하면 에러 발생         
      결론으론 '가 들어간 문장을 그대로 insert하면 mysql에서 입력시 에러가 난다.
    이걸 '앞에 \를 넣음으로써 디비에 저장을 시킬 수 있다.
    실제 디비에는 \는 안보이고 그대로 '가 들어간 문장의 형태로 보인다.
  
  2.스트링 값을 addslashes를 이용하면 실제 I\'m sorry to bother you가 된다.
    이걸 다시 입력하면
    INSERT INTO WORDBOOK_SV(word_name)
                     VALUES('I\'m sorry to bother you')
    하면 정상적으로 디비에 입력이 된다.
  3.입력된 디비의 데이터를 보면 거기엔 I'm sorry to bother you가 입력이 되어 있다.
  4.그놈을 조회후 다시 php에서 결과값을 받아서 찍어봐도 \는 사라진 값이 날라온다.
  5.기억해 두자. addslashes, 참고로 addslashes를 한걸 stripslashes를 하면 역슬래쉬가 빠진 문자열로
     만들수 있다.

간만의 삽질~

==== 2010.10.27 추가 =============================

UTF-8이라서 addslashes()가 불필요한게 아니라

리눅스 서버의 php.ini 설정이 문제다.

1.phpinfo를 찍어본다.

2.항목중 magic_quotes_gpc 검색해본다 On이 되어 있어야 한다.

   만일 off로 되어 있으면.

3.vi php.ini를 열어 magic_quotes_gpc = off 항목을 magic_quotes_gpc = on으로 바꿔주고

    service httpd restart 해준다.

4.다시 phpinfo를 찍어본다. 

5.항목중 magic_quotes_gpc를 검색해본다. on으로 수정했으니 on으로 나오면 끝.


======= 추가 참조 ===========================

전에 php코딩시 변수에 ' , " 등이 있을경우에 대해서 글을 쓴적이 있다.

위와같은 따옴표가 있으면 쿼리에서오류를 내기 때문에 addslashes()를 해줘야한다.

그러면 특수문자 앞에 \(역슬러시)가 붙기 때문에 정상적으로 쿼리를 날린다.

그리고 데이타를 불러온후 표현할때 stripslashes를 사용한다고 했다.

그러면 특수문자 앞에 붙은 \ 를 제거하고 원래 데이타만을 표현한다.

하지만 이는 나름 귀찮은 일이며 이를 위한 설정이 있다.


php.ini파일에 magic_quotes_gpc라는 설정이 있다.

요놈이 무엇인가 하니.

gpc 즉 get, post, cookie 를 사용하여 넘어온 밸류들에 대해서 quotes(', ", \, 널문자 등) 가 있을때 알아서 그러니까 마법처럼 알아서 \ 를 붙여준다. --> just like magic~!^^

magic_quotes_gpc의 설정을 on으로 하면 또한가지의 이득을 볼수있는것이
sql injection에 대해서 안전하게된다.

사용자의 데이터 입력값에 쿼리를 조작하기 위한 ' 등이 있을경우 이를 \ 처리 해주므로 안전하게 된다.


get_magic_quotes_gpc()

magic_quotes_gpc의 설정값을 반환한다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
» php mysql에 insert시 싱글쿼츠(홑따옴표) 입력 처리 (mag... ADMINPLAY 2013.09.07 8972
47 Ubuntu 에서 PHP Screw 컴파일시 에러날 때 ADMINPLAY 2013.09.07 7030
46 [php모듈] php 소스 암호화 하기 - php_screw-1.5 file ADMINPLAY 2013.03.26 9617
45 configure: error: utf8_mime2text() has new signature, ... ADMINPLAY 2010.05.18 21989
44 oracle10g + php5.2.11 error [OCIEnvNlsCreate() failed] ADMINPLAY 2010.02.24 71308
43 Warning: Unknown: open(, O_RDWR) failed: No such file ... ADMINPLAY 2010.01.29 19807
42 register_globals 에 따른 서버 변수형 변환 ADMINPLAY 2010.01.09 17905
41 register_globals = off 란? ADMINPLAY 2010.01.09 15583
40 4.1.0이상 php 버전에서 register_globals = Off 일때 기... ADMINPLAY 2010.01.09 15485
39 PHP FreeTDS 사용 (MS-SQL) file ADMINPLAY 2010.01.05 16983
38 Fatal error: Call to undefined function domxml_open_mem() ADMINPLAY 2009.12.31 17399
37 pear 1.9 업그레이드 및 패치설치 ADMINPLAY 2009.12.31 17366
36 PEC HTTP Setup ADMINPLAY 2009.12.31 15979
35 PHP.INI에서의 세션 관련설명 ADMINPLAY 2009.10.19 17546
34 Maximum execution time of 30 seconds exceeded ADMINPLAY 2009.09.28 17436
33 php세션정리 ADMINPLAY 2009.09.19 17241
32 Warning: flock(): supplied argument is not a valid str... ADMINPLAY 2009.09.09 16812
31 PHPMyAdmin - blowfish_secret 해결방법 ADMINPLAY 2009.09.08 16550
30 php컴파일에러(flex) configure: error: cannot find out... ADMINPLAY 2009.08.08 16157
29 PHP - eAccelerator 설치 ADMINPLAY 2009.08.03 15054
Board Pagination Prev 1 2 3 Next
/ 3

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234