Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP htmlspecialchars() 함수 완벽 정리 – 특수 문자를 HTML 엔티티로 변환하기


PHP의 htmlspecialchars() 함수는 특수 문자를 HTML 엔티티로 변환하는 데 사용됩니다. 사용자 입력값을 웹 페이지에 출력할 때 발생할 수 있는 XSS(크로스 사이트 스크립팅) 공격을 방지하고, HTML 태그가 의도치 않게 실행되는 것을 막아주기 때문에 웹 개발에서 반드시 알아야 할 필수 함수입니다.

이 함수가 변환하는 미리 정의된 문자는 다음과 같습니다.

  • & (앰퍼샌드) → &
  • " (큰따옴표) → "
  • ' (작은따옴표) → '
  • < (보다 작음) → &lt;
  • > (보다 큼) → &gt;

문법(Syntax)

htmlspecialchars(str, flags, character-set, double_encode)

매개변수(Parameters)

  • str : 변환할 문자열입니다.

  • flags : 따옴표 처리 방식, 잘못된 인코딩 처리 방식, 사용할 문서 타입(doctype)을 지정합니다.

    사용 가능한 따옴표 스타일은 다음과 같습니다.

    • ENT_COMPAT : 기본값. 큰따옴표만 인코딩합니다.

    • ENT_QUOTES : 큰따옴표와 작은따옴표를 모두 인코딩합니다.

    • ENT_NOQUOTES : 어떤 따옴표도 인코딩하지 않습니다.

    잘못된 인코딩 관련 플래그는 다음과 같습니다.

    • ENT_IGNORE : 함수가 빈 문자열을 반환하는 대신 잘못된 인코딩을 무시합니다. 보안상 문제가 발생할 수 있으므로 사용을 피하는 것이 좋습니다.

    • ENT_SUBSTITUTE : 빈 문자열을 반환하는 대신, 지정된 문자셋에서 잘못된 인코딩 부분을 유니코드 대체 문자 U+FFFD(UTF-8) 또는 &#FFFD;로 대체합니다.

    • ENT_DISALLOWED : 지정된 doctype에서 유효하지 않은 코드 포인트를 유니코드 대체 문자 U+FFFD(UTF-8) 또는 &#FFFD;로 대체합니다.

    사용할 doctype을 지정하는 추가 플래그는 다음과 같습니다.

    • ENT_HTML401 : 기본값. 코드를 HTML 4.01로 처리합니다.

    • ENT_HTML5 : 코드를 HTML 5로 처리합니다.

    • ENT_XML1 : 코드를 XML 1로 처리합니다.

    • ENT_XHTML : 코드를 XHTML로 처리합니다.

  • character-set : 사용할 문자셋입니다.

    허용되는 값은 다음과 같습니다.

    • UTF-8 : 기본값. ASCII 호환 멀티바이트 8비트 유니코드

    • ISO-8859-1 : 서유럽어권 문자셋

    • ISO-8859-15 : 서유럽어권 문자셋 (ISO-8859-1에 없던 유로화 기호와 프랑스어·핀란드어 문자 추가)

    • cp866 : DOS 전용 키릴 문자셋

    • cp1251 : Windows 전용 키릴 문자셋

    • cp1252 : Windows용 서유럽어권 문자셋

    • KOI8-R : 러시아어 문자셋

    • BIG5 : 번체 중국어, 주로 대만에서 사용

    • GB2312 : 간체 중국어, 중국 국가 표준 문자셋

    • BIG5-HKSCS : 홍콩 확장이 포함된 Big5

    • Shift_JIS : 일본어 문자셋

    • EUC-JP : 일본어 문자셋

    • MacRoman : Mac OS에서 사용되던 문자셋

  • double_encode : 이미 존재하는 HTML 엔티티를 다시 인코딩할지 여부를 지정하는 불리언(Boolean) 값입니다.

    • TRUE : 기본값. 모든 문자를 변환합니다.

    • FALSE : 기존 HTML 엔티티는 인코딩하지 않습니다.

반환값(Return Value)

htmlspecialchars() 함수는 변환이 완료된 문자열을 반환합니다.

예제(Example)

다음은 htmlspecialchars() 함수의 사용 예제입니다.

<?php
$res = htmlspecialchars("<a href='mylink'><strong>Demo</strong></a>", ENT_QUOTES);
echo $res;
?>

실행 결과(Output)

&lt;a href=&#039;mylink&#039;&gt;&lt;strong&gt;Demo&lt;/strong&gt;&lt;/a&gt;

위 실행 결과에서 확인할 수 있듯이, ENT_QUOTES 옵션을 지정하면 큰따옴표뿐 아니라 작은따옴표(&#039;)까지 함께 변환됩니다. 이처럼 htmlspecialchars() 함수는 HTML 구조를 깨뜨릴 수 있는 특수 문자를 안전한 엔티티 형태로 바꿔주므로, 게시판·댓글 등 사용자 입력을 그대로 출력해야 하는 상황에서 활용하면 보안성을 크게 높일 수 있습니다.