일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- java
- JavaScript
- 공모주 청약 일정
- 자바
- jquery
- Oracle
- 주식 청약
- 맥
- linux
- 자바스크립트
- Stock ipo
- 6월 공모주 청약 일정
- 리눅스
- 주식 청약 일정
- 오라클
- SQL
- 7월 공모주 청약 일정
- Eclipse
- 주식
- css
- 공모주
- codeigniter
- php
- MYSQL
- 코드이그나이터
- 제이쿼리
- html
- 공모주 청약
- Stock
- IPO
- Today
- Total
개발자의 끄적끄적
[PHP] addslashes(), stripslashes() 그리고, get_magic_quotes_gpc() [펌] 본문
[PHP] addslashes(), stripslashes() 그리고, get_magic_quotes_gpc() [펌]
addslashes() 함수와 그와 반대되는 stripslashes() 함수
DB 작업을 하기 위해서 쿼리를 작성하게 되는데, 이때 DB 시스템은 작은따옴표 ' 와 큰따옴표 " 그리고 백슬래시 / 그리고, NULL byte 를 문자열을 구분하는 등의 기준으로 이용하게 됩니다. 그런데, 하나의 문자열 안에 따옴표가 들어가 있게되면, 예상치 못하게 오류가 발생하게 됩니다. 그래서, 문자열을 데이터베이스에 저장할 수 있는 포맷으로 변화시켜줄 필요가 있습니다.
예를 들면,
I'm a boy 를 문자열로 지정해서 'I'm a boy' 이렇게 쿼리로 전송되게 되면, I 뒤의 작은 따옴표 때문에 오류가 발생하게 됩니다.
그래서, 내부에 위치하게 될 따옴표들을 기준을 가지고 다르게 표현을 해 줘야합니다. 흔히들 이스케이프(escape) 시킨다...라고 표현하는데요.
I\'m a boy 로 바꾸어 주는 작업을 말합니다. 그 작업을 해주는 함수가 아래의 addslashes() 함수입니다.
string addslashes ( string $str )
그럼, DB에서 다시 꺼내왔을 때는 추가됐던 백슬래쉬를 제거를 해줘야 원래의 문자열이 되겠지요? 추가됐던 백슬래쉬를 제거해주는 함수가 아래의 stripslashes() 입니다.
string stripslashes ( string $str )
근데, 이 작업을 자동으로 해주도록 PHP 를 설정하는 방법이 있답니다.
그걸 magic_quotes_gpc 라고 합니다.
GET, POST, COOKIE 를 통해 넘어오는 값들에 대해서 자동으로 이스케이프 시켜주는 기능입니다.
PHP 의 설정값이라, 우리가 php 파일내에서 임의로 세팅을 해 줄 수는 없습니다. 서버 관리자가 PHP를 설치할 때, 혹은 이후 설정을 하게 됩니다.
그럼, 현재 저 매직 쿼트 지피시 가 설정되어 있는지를 알아내는 함수가 있겠지요?
bool get_magic_quotes_gpc ( void )
이 함수가 FALSE을 리턴하면, 설정이 되어있지 않다는 뜻입니다.
php.net 에 있는 예를 살펴보는 것이 좋을 거 같습니다.
<?php
// If magic quotes are enabled
echo $_POST['lastname']; // O\'reilly
echo addslashes($_POST['lastname']); // O\\\'reilly
// Usage across all PHP versions
if (get_magic_quotes_gpc()) {
$lastname = stripslashes($_POST['lastname']);
}
else {
$lastname = $_POST['lastname'];
}
?>
사용자가 가입폼 에서 이름을 입력하고 POST 방식으로 Submit 되어온 내용을 받아서 처리하는 부분인 것 같습니다. lastname 항목에 O'reilly 라고 입력을 했다고 보입니다.
magic quotes 가 ON 되어있으면, POST 방식으로 전달되어 온 $_POST['lastname'] 값은 자동으로 이스케이프가 되어있습니다. O'reilly 가 이스케이프 되었으니, O\'reilly 가 되어있겠군요.
화면에 lastname을 출력하고자 할때, get_magic_quotes()를 통해 설정상태를 확인을 하고, 설정되어 있으면, 자동으로 \가 붙어 있을테니, stripslashes()를 하고 출력을 해야겠구요. 그렇지 않을 경우는 그냥 출력을 하면 되겠지요.
출처: https://zzaps.tistory.com/45 [궁극의 잡 블로그]
'개발 > php' 카테고리의 다른 글
[php] codeigniter + vue 세팅 [펌] (0) | 2020.03.07 |
---|---|
[php] 리눅스에서 PID 로 프로세스 동작 유무 체크 (0) | 2020.03.07 |
[php] 전화번호 국내 지역화 코드 [펌] (0) | 2020.03.06 |
[php] unicode (UTF-8) 인코딩에서 한글 글자수 출력 및 iconv_substr [펌] (0) | 2020.03.03 |
[php] serialize() 직렬화(일렬화) , unserialize() 직렬화된 데이타를 일반배열로 변환 [펌] (0) | 2020.03.03 |