PHP에서 이스케이프(escaping)란 특정 문자나 코드가 그대로 출력되도록 하거나, PHP 코드가 HTML과 함께 올바르게 동작하도록 처리하는 방법을 의미합니다.
1. HTML에서 PHP 코드 이스케이프
PHP 코드를 HTML 내부에서 사용할 때, PHP 태그를 활용하여 이스케이프할 수 있습니다
<html>
<body>
<h1>PHP 예제</h1>
<?php echo "<p>이것은 PHP에서 출력한 문장입니다.</p>"; ?>
</body>
</html>
- <?php ?> 태그를 사용하면 HTML에서 PHP 코드를 실행할 수 있습니다.
2. 문자열에서 특수문자 이스케이프
PHP에서 문자열을 사용할 때, 특수 문자를 그대로 출력하고 싶다면 백슬래시(\)를 사용하여 이스케이프해야 합니다.
(1) 기본 특수문자 이스케이프
echo "그는 \"안녕하세요\" 라고 말했다.";
출력
그는 "안녕하세요" 라고 말했다.
주요 특수문자 목록
이스케이프 시퀀스 | 의미 |
\" | 큰따옴표 |
\' | 작은따옴표 |
\\ | 백슬래시 (\) |
\n | 줄바꿈 (New Line) |
\t | 탭(Tab) |
\r | 캐리지 리턴 (Carriage Return) |
\$ | 달러 기호 ($) |
(2) addslashes() 사용 (문자열을 안전하게 처리)
$str = "I'm a developer.";
$escaped_str = addslashes($str);
echo $escaped_str;
작은따옴표나 큰따옴표가 포함된 문자열을 DB 등에 저장할 때 유용합니다.
3. HTML 엔티티 이스케이프 (htmlspecialchars()와 htmlentities())
HTML에서 <, >, " 등의 문자를 그대로 출력하려면 HTML 엔티티로 변환해야 합니다.
(1) htmlspecialchars()
$str = "<b>안녕하세요</b>";
echo htmlspecialchars($str);
출력
<b>안녕하세요</b>
- <, >, " 등의 HTML 태그가 브라우저에서 그대로 출력됩니다.
- 사용처: 사용자 입력 값 출력 시 XSS(크로스 사이트 스크립팅) 공격 방지.
(2) htmlentities()
$str = "<b>안녕하세요</b>";
echo htmlentities($str);
출력
<b>안녕하세요</b>
- htmlspecialchars()와 비슷하지만, 더 많은 특수 문자를 변환함.
4. URL 이스케이프 (urlencode() & urldecode())
URL에서 특수문자를 안전하게 처리하기 위해 사용합니다.
(1) urlencode() (인코딩)
$str = "안녕하세요 PHP!";
echo urlencode($str);
출력
%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94+PHP%21
공백( )은 + 또는 %20으로 변환됨.
(2) urldecode() (디코딩)
$str = "%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94+PHP%21";
echo urldecode($str);
출력
안녕하세요 PHP!
5. SQL 이스케이프 (mysqli_real_escape_string())
SQL 인젝션 공격을 방지하기 위해 사용자 입력을 이스케이프하는 것이 중요합니다.
$conn = new mysqli("localhost", "user", "password", "database");
$user_input = "O'Reilly";
$escaped_input = mysqli_real_escape_string($conn, $user_input);
$query = "SELECT * FROM users WHERE name = '$escaped_input'";
echo $query;
출력
SELECT * FROM users WHERE name = 'O\'Reilly'
데이터베이스 쿼리에 직접 입력할 때 사용자가 입력한 문자열의 작은따옴표(')를 이스케이프하여 SQL 인젝션 방지.
정리
이스케이프 방법 | 설명 |
백슬래시(\) | 문자열에서 ", ', \n 등의 특수문자 처리 |
addslashes() | 작은따옴표, 큰따옴표를 자동 이스케이프 |
htmlspecialchars() | <, >, & 등을 HTML 엔티티로 변환 |
htmlentities() | HTML의 모든 특수문자를 엔티티로 변환 |
urlencode() / urldecode() | URL에 안전한 형태로 변환 및 복구 |
mysqli_real_escape_string() | SQL 문에서 특수문자를 안전하게 변환 |
PHP에서 문자열을 안전하게 처리하고 보안 문제를 방지하려면 적절한 이스케이프 방법을 선택해야 합니다.
With ChatGPT