괄호가 )로 자동으로 바뀌어버릴때 해결법(ft.EscapeHtml)
💡 핵심 요약 (TL;DR)
이는 브라우저에서 자동으로 문자열 escape를 하기 때문이다. 따라서 unescape를 해주면 해결된다.
jsp페이지에서 검색을 하는데 자동으도 괄호가 escape되어 쿼리에서 where 조건절이 검색되지않았다.
🥨 문제 상황
아래 예시를 보자. option의 value값에 괄호가 들어가있다. 그결과 브라우저가 자동으로
- jsp페이지
1 | (코드 생략) |
- sql쿼리
1 | SELECT |
실행결과 CAL_TYPE 조건이 달력(음력)이 아닌 달력(음력)으로 where 조건절이 들어갔기에 원하는 데이터가 나오지않았다.
1 | SELECT |
🥨 원인
이는 브라우저에서 자동으로 문자열 escape를 하기 때문이다.
- 문자열 escape란? 브라우저에서 get방식 전송시 브라우저 자체적으로 UTF-8문자를 escape한다.
🥨 해결방법
따라서 unescape를 해주면 해결된다.
크게 3가지 방법이 있다.
- org.springframework.web.util.HtmlUtils.htmlUnescape
- org.apache.commons.lang.StringEscapeUtils.escapeHtml
- replace메서드 사용
1 HtmlUtils.htmlUnescape 사용
컨트롤러에서 받은 파라미터를 unescape한다.
1 | (중략) |
2 StringEscapeUtils.escapeHtml 사용
컨트롤러에서 받은 파라미터를 unescape한다.
1 | (중략) |
3 replace() 사용
컨트롤러에서 받은 특정 파라미터를 replace메서드를 이용해 바꿔준다.
1 | (중략) |
🥨 선택
현재 전자정부프레임워크3.8환경이므로 스프링프레임워크에서 제공하는 htmlUnescape메서드를 사용했다.
내 상황에서는 escape가 1번했는데도 정상출력이 되지않아 찾아보니 escape가 2번 되어있었다. 왜일까…?
암튼 unescape를 2번해서 해결했다.
- Controller.java
1 | (중략) |
적용한 뒤 콘솔을 보니 아래처럼 쿼리가 원하는대로 정상출력됐다.
1 | SELECT |
해결!
#오류일지
괄호가 )로 자동으로 바뀌어버릴때 해결법(ft.EscapeHtml)