모두의매뉴얼
🚀

[PHP] POST 데이터를 받을 때 특수문자 필터링 하는 방법

📈0


문제

이전에 작성했던 에서 DB 에 특수문자가 들어가 있는 상황이고, 그걸 select 해 가져오는 상황에서 특수문자에 백슬래시가 자동으로 들어가 그 백슬래시를 str_replace 로 없애는 방법에 대해서 기록으로 남겼습니다.

그런데 여기서 드는 생각이,

애초에 DB에 텍스트 데이터를 넣을 때 특수문자를 HTML 문자표로 넣으면 되는 것 아닐까?

였습니다.

예를 들어 보안상 문제가 되기 때문에, " 또는 ' 를 이스케이프 문자 없이 넣을 수 없다면, 각각의 문자에 대응하는 " 또는 '로 넣으면 되는 것 아닐까라는 생각인 것이죠.

전문 개발자도 아닌 제가 이런 생각을 하는데, 그동안 수많은 개발자들이 이런 생각을 안 했을까요?

해결

그 해결 방법은 이미 PHP 언어 내부에 있었고, 그것은 바로 filter_input 함수를 사용하는 것입니다.

간단하게 그 사용법을 예제를 통해 알아 볼까요?

$data['desc'] = filter_input(INPUT_POST, "description", FILTER_SANITIZE_SPECIAL_CHARS);

위 코드를 그대로 해석하자면, $data 배열의 desc 키의 값으로 namedescriptioninput 태그의 값을 POST 형식으로 가져올 때, 특수문자를 깨끗하게 만들어서(SANITIZIE) 입력하라는 뜻으로 풀어 쓸 수 있습니다.

filter_input 함수에 투입되는 것 들을 하나 씩 자세히 살펴보면,

  • INPUT_POST: 값을 POST 형식으로 가져올 때 사용함. GET 형식으로 가져오고 싶다면 INPUT_GET 사용.
  • “description”: 값을 전달 받을 input 태그의 name. 보통 $_POST['description'] 형식으로 가져오는데 여기 들어가는 name 이라고 이해하면 됨.
  • FILTER_SANITIZE_SPECIAL_CHARS: inputvalue 값을 어떤 방식으로 깨끗하게 SANITIZING 할 지 결정하는 인수. FILTER_SANITIZE_SPECIAL_CHARS 는 특수문자를 특수문자가 아닌 형식이 되도록 SANITIZING 하도록 설정함.

끝.

    댓글 남기기

© 모두의매뉴얼 2025
🗝️