상세 컨텐츠

본문 제목

PHP 전송 값 중에 역슬러쉬 문제

Web Development

by thankee 2008. 10. 28. 00:06

본문

폼에 데이터를 입력하고 PHP에서 입력을 받게 될 경우, 역슬러쉬가 붙어 버리는 문제가 있습니다.

send.html
<form action="receive.php" method="post">
    <input type="text" name="data" />
    <input type="submit" />
</form>

receive.php
<?php
    echo $_POST['data'];
?>

위의 소스를 실행해서 폼에 다음과 같은 데이터를 입력합니다.

1

위의 데이터를 입력하면 출력값은 다음과 같습니다.

2

이상하게 역슬러쉬가 붙어버렸습니다. 이 문제의 원인은 php.ini에서 magic_quotes_gpcOn으로 되어 있을 경우, PHP의 모든 GPC데이터(Get/Post/Cookie)는 자동으로 특정 문자에 역슬러쉬를 자동으로 부여해버립니다. 이는 데이터베이스에 데이터를 입력할 경우 수동으로 역슬러쉬를 붙이지 않고 자동으로 역슬러쉬가 붙기를 희망하는 사용자를 위해 만들어진 기능이라고 하더라구요.

만약 이 자동으로 역슬러쉬를 붙이는 기능을 원하지 않으면 php.ini를 열고 magic_quotes_gpcOn(기본 값)에서 Off로 변경하면 됩니다. 이 기능과 함께 다음과 같은 부가 함수도 제공합니다.

string stripslashes(string)와 string addslashes(string)라는 함수로서 각각 슬러쉬를 제거하거나 슬러쉬를 붙여버리는 함수입니다. stripslashes()는 PHP에서 GPC데이터에 붙인 역슬러쉬만을 제거하는 기능을 가지고 있습니다. addslashes()는 반대로 특정 문자열에 역슬러쉬를 붙여버리며 stripslashes()로 원상복귀 가능합니다.

receive.php를 다음과 같이 수정한 후 출력해봅시다.

receive.php
<?php
    $a = addslashes($_POST['data']);
    $b = stripslashes($_POST['data']);
    $c = $_POST['data'];
    echo "addslahses : $a <br />stripslashes : $b <br /> nomal text : $c";
?>

결과는 다음과 같습니다.

image

관련글 더보기