PHP 텍스트에서 HTML 제거 하는 방법
2025. 6. 4. 22:31ㆍ프로그램/PHP 초급
PHP에서 텍스트에서 HTML 태그를 제거하는 가장 일반적이고 권장되는 함수는 바로 내장 함수인 strip_tags() 입니다.
strip_tags() 함수 사용
strip_tags() 함수는 문자열에서 HTML, XML, PHP 태그를 제거합니다. 선택적으로 제거하지 않을 태그를 지정할 수도 있습니다.
PHP
<?php
/**
* 주어진 텍스트에서 모든 HTML 태그를 제거합니다.
*
* @param string $text HTML 태그가 포함된 원본 텍스트
* @return string HTML 태그가 제거된 순수 텍스트
*/
function removeHtmlTags(string $text): string
{
// 기본적으로 모든 HTML 태그를 제거합니다.
return strip_tags($text);
}
// 사용 예시:
$htmlText1 = "<p>안녕하세요, <b>반갑습니다</b>!</p> <a href='#'>링크</a>";
$cleanText1 = removeHtmlTags($htmlText1);
echo "원본: " . $htmlText1 . PHP_EOL;
echo "제거 후: " . $cleanText1 . PHP_EOL . PHP_EOL;
// 출력:
// 원본: <p>안녕하세요, <b>반갑습니다</b>!</p> <a href='#'>링크</a>
// 제거 후: 안녕하세요, 반갑습니다! 링크
$htmlText2 = "<div><h1>제목</h1><p>내용이 <span>있습니다.</span></p></div>";
$cleanText2 = removeHtmlTags($htmlText2);
echo "원본: " . $htmlText2 . PHP_EOL;
echo "제거 후: " . $cleanText2 . PHP_EOL . PHP_EOL;
// 출력:
// 원본: <div><h1>제목</h1><p>내용이 <span>있습니다.</span></p></div>
// 제거 후: 제목내용이 있습니다.
$htmlText3 = "<script>alert('XSS');</script>안녕";
$cleanText3 = removeHtmlTags($htmlText3);
echo "원본: " . $htmlText3 . PHP_EOL;
echo "제거 후: " . $cleanText3 . PHP_EOL . PHP_EOL;
// 출력:
// 원본: <script>alert('XSS');</script>안녕
// 제거 후: 안녕
?>
특정 태그를 제외하고 제거하는 경우
strip_tags() 함수는 두 번째 인자로 제거하지 않을 태그를 지정할 수 있습니다. 예를 들어, <b>와 <i> 태그만 남기고 싶을 때 사용할 수 있습니다.
PHP
<?php
/**
* 주어진 텍스트에서 지정된 태그들을 제외한 모든 HTML 태그를 제거합니다.
*
* @param string $text HTML 태그가 포함된 원본 텍스트
* @param string $allowableTags 허용할 HTML 태그 목록 (예: '<b><i><a>')
* @return string HTML 태그가 제거된 순수 텍스트
*/
function removeHtmlTagsExcept(string $text, string $allowableTags = ''): string
{
return strip_tags($text, $allowableTags);
}
$htmlText = "안녕하세요, <b>반갑습니다</b>! <i>정말로요</i>. <p>이것은 단락입니다.</p>";
$cleanTextAll = removeHtmlTagsExcept($htmlText);
echo "모든 태그 제거: " . $cleanTextAll . PHP_EOL;
// 출력: 안녕하세요, 반갑습니다! 정말로요. 이것은 단락입니다.
$cleanTextAllowed = removeHtmlTagsExcept($htmlText, '<b><i>');
echo "<b>, <i> 태그 허용: " . $cleanTextAllowed . PHP_EOL;
// 출력: 안녕하세요, <b>반갑습니다</b>! <i>정말로요</i>. 이것은 단락입니다.
?>
strip_tags() 사용 시 고려사항
- 문자열 잘림 문제: strip_tags()는 태그를 제거할 뿐 HTML 엔티티(예: , &)는 변환하지 않습니다. 또한, CSS나 JavaScript를 포함하는 <style> 또는 <script> 블록 내부의 텍스트도 제거되지만, 태그 자체를 제거하기 때문에 의도치 않게 중간에 텍스트가 잘려 보이거나 연결될 수 있습니다.
- XSS 방어의 완전성: strip_tags()는 HTML 태그를 제거하지만, 모든 종류의 XSS 공격을 100% 방어하지는 못합니다. 예를 들어, javascript: 프로토콜을 사용한 URL이나 CSS의 expression() 같은 경우에는 방어하지 못할 수 있습니다. 사용자 입력을 받을 때는 strip_tags() 외에 htmlspecialchars()를 함께 사용하거나, 더 강력한 HTML Purifier 같은 라이브러리를 사용하는 것이 안전합니다.
- 권장 조합: htmlspecialchars(strip_tags($input))
- HTML 유효성 검사 부족: strip_tags()는 HTML을 파싱하여 유효성을 검사하지 않습니다. 단순히 <와 > 사이의 모든 것을 태그로 간주하고 제거하므로, 잘못된 형식의 HTML도 제거될 수 있습니다.
대부분의 경우, 텍스트에서 HTML을 제거하여 순수한 텍스트만 얻고 싶을 때는 strip_tags()가 가장 간단하고 효율적인 내장 함수입니다.
'프로그램 > PHP 초급' 카테고리의 다른 글
| macOS에서 파일 업로드 시 발생하는 한글 자소 분리 문제를 해결 (0) | 2025.06.04 |
|---|---|
| PHP 함수가 있는지 체크하고 정의 하는 방법 (0) | 2025.06.04 |
| Content Security Policy (CSP)엄격하게 설정하는 방법 (0) | 2025.06.04 |
| PHP Path Combine 방법 (0) | 2025.06.04 |
| PHP SELF 와 query string 결합하는 방법 (0) | 2025.06.04 |
