본문 바로가기

java

HTML 특수문자 변환하기(escape/unescape)

jsp에서 form 전송한 데이터 중 특수문자를 java단에서 HTML entity 형식으로 읽어들여서 변환이 필요했다.

데이터가 달라지는 것은 클라이언트에서 서버로 데이터를 전송할때 보안상의 이유로 인코딩하도록 필터를 적용해놓았기 때문이다.

 

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import com.navercorp.lucy.security.xss.servletfilter.XssEscapeServletFilter;

@Bean
public FilterRegistrationBean<HTMLTagFilter> htmlTagFilter() {
    
    FilterRegistrationBean<HTMLTagFilter> registrationBean = new FilterRegistrationBean<>();
    
    registrationBean.setFilter(new HTMLTagFilter());
    registrationBean.addUrlPatterns("*.do");
    
    return registrationBean;
}

@Bean
public FilterRegistrationBean<XssEscapeServletFilter> xssEscapeServiceFilter() {
    FilterRegistrationBean<XssEscapeServletFilter> registrationBean = new FilterRegistrationBean<>();
    
    registrationBean.setFilter(new XssEscapeServletFilter());
    registrationBean.addUrlPatterns("/*");
    
    return registrationBean;
}

 

네이버에서 제공하는 lucy-xss-servlet filter인데 이 부분은 따로 내용을 정리하여 포스팅할 예정이다.

 

아무튼 대표적인 HTML entity는 아래와 같다.

character entity
& &amp;
" &quot;
< &gt;
> &gt;
공백 &nbsp;

 

이는 StringEscapeUtils 클래스를 통해 해결할 수 있다.

entity를 문자로 변환하기 위해서는 unescapeHtml 함수를 사용한다.

StringEscapeUtils.unescapeHtml(previousUrl);

 

디코딩(decoding)할 문자열을 파라미터로 주면 원하는 결과를 얻을 수 있다.

HTML 뿐만 아니라 Java, Java Script, XML 및 SQL에 대해서 unescape 하는 함수 그리고 반대로 escape 하는 함수도 포함되어 있으니 활용하면 좋을 것 같다.