PHP의 htmlspecialchars 와 strip_tags 함수의 차이점
조회수 10288회
안녕하세요. 남가람북스의 PHP+MySQL 웹 개발 마스터북을 보고 있는데
책 내용중에 이해가 되지 않는 부분이 있어서 문의드립니다.
htmlspecialchars 와 strip_tags 에 대해 공부중인데
책 설명에 따르면 HTML 태그를 HTML 엔티티로 변환하는 함수가 htmlspecialchars 이고
strip_tags 는 HTML 태그를 제거하는 기능이라 나와있습니다.
그런데 strip_tags 를 설명하면서 "이 함수는 HTML 태그는 제거하지 않기 때문에 크로스사이트
스크립팅에 대응하기 위해서는 이전에 설명한 htmlspecialchars 함수를 사용하는 편이
좋습니다 " 라는데 이게 이해가 안됩니다.
strip_tags 가 HTML 태그를 제거하는 함수인데 HTML 태그를 제거하지 않는다니 이게 무슨
뜻인가요? 참고로 웹페이지 소스보기 하면 태그 제거도 되어 있습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
htmlspecialchars 와 strip_tags 는 기능이 다릅니다.
htmlspecialchars() 는 특수 문자를 HTML 엔티티로 변환 합니다.
<?php $new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); echo $new; //출력 결과 : <a href='test'>TEST</a> ?>
참고 URL : http://php.net/manual/kr/function.htmlspecialchars.php
strip_tags()는 말 그대로 태그를 제거(허가된 태크는 제외)하고 텍스트만 반환합니다.
<?php $text = '<p>테스트 문단.</p><!-- 주석 --> <a href="#fragment">다른 텍스트</a>'; echo strip_tags($text); // 출력 결과: 테스트 문단. 다른 텍스트 echo "\n"; // <p>와 <a>를 허용 echo strip_tags($text, '<p><a>'); // 출력 결과: <p>테스트 문단.</p> <a href="#fragment">다른 텍스트</a> ?>
근데 strip_tags()는 HTML의 유효성을 검사하지 않기 때문에, 부분적이거나 깨진 태크는 예상 외로 텍스트/데이터를 제거할 수 없습니다. 예를 들어
strip_tags('<br>줄바꿈<br/>새줄<br />새줄2', '<br>');
경우 제대로 <br>요소를 거르지 못합니다.
댓글 입력