1. 개념
<span th:text="${data}">
컨텐츠 안에서 직접 출력하기 = [[${data}]]
2. Escape 기능
📌 HTML 엔티티
- 웹 브라우저는 <를 HTML 태그의 시작이라고 인식함
- 따라서 < 를 있는그대로의 문자로 표현할 방법이 필요한데, 이것이 바로 HTML 엔티티
- 이렇게 HTML에서 사용하는 특수문자를 HTML 엔티티로 변경하는 것이 바로 "이스케이프(Escape)"
- 타임리프가 제공하는 "th:text, [[...]]"는 기본적으로 이스케이프를 제공
📌 Escape를 사용하고싶지 않다면?
- Unescape 사용
- 타임리프는 아래 두 기능을 제공
- th:text => th:utext
- [[...]] => [(...)]
3. 사용 예시
@Controller
@RequestMapping("/basic")
public class BasicController {
@GetMapping("text-basic")
public String textBasic(Model model) {
model.addAttribute("data", "Hello <b>Spring!<b>");
return "basic/text-basic";
}
@GetMapping("text-unescaped")
public String textUnescaped(Model model) {
model.addAttribute("data", "Hello <b>Spring!<b>");
return "basic/text-unescaped";
}
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>
콘텐츠에 데이터 출력하기
</h1>
<ul>
<li>
th:text 사용 <span th:text="${data}"></span>
</li>
<li>
콘텐츠 안에서 직접 출력하기 = [[${data}]]
</li>
</ul>
</body>
</html>
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>text vs utext</h1>
<ul>
<li>th:text = <span th:text="${data}"></span></li>
<li>th:utext = <span th:utext="${data}"></span></li>
</ul>
<h1><span th:inline="none">[[...]] vs [(...)]</span></h1>
<ul>
<li><span th:inline="none">[[...]] = </span>[[${data}]]</li> //escape
<li><span th:inline="none">[(...)] = </span>[(${data})]</li> //unescape
</ul>
[주의] 📌 실무에서는 escape를 기본으로 하고, 꼭 필요한 경우만 unescape 사용!!!
- 실제 escape를 사용하지 않을 경우 HTML 정상 렌더링이 되지 않는 수많은 문제가 발생하므로