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 답변

  • htmlspecialcharsstrip_tags 는 기능이 다릅니다.

    htmlspecialchars() 는 특수 문자를 HTML 엔티티로 변환 합니다.

    <?php
     $new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
    
     echo $new; 
     //출력 결과 :  &lt;a href=&#039;test&#039;&gt;TEST&lt;/a&gt;
    ?>
    

    참고 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>요소를 거르지 못합니다.

    참고 URL: http://php.net/manual/kr/function.strip-tags.php

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)