URL escape / encoding
URLEncoder.encode()
메소드를 써도 되지만 이 기능은 파라메터로 넘어온 모든 문자열을 인코딩한다.
따라서 아래와 같은 문자열을 입력할 경우
public static void main(String[] args) throws Exception { String url = "https://test.com/call.jsp?pararm=한글파라메터"; System.out.println(URLEncoder.encode(url, "UTF-8")); } 출력결과 : https%3A%2F%2Ftest.com%2Fcall.jsp%3Fpararm%3D%ED%95%9C%EA%B8%80%ED%8C%8C%EB%9D%BC%EB%A9%94%ED%84%B0
위와같이 https://test.com/call.jsp?param=
과 같이 인코딩이 필요하지 않은 부분까지 모두 인코딩을 해 버린다.
따라서 URLEncoder.encode()
메소드는 필요한 값
만 인코딩 할때 사용하여야 하므로 인코딩이 필요한 부분을 문자열에서 추출해서 적용해야 하는 번거로움이 있다
이것을 해결하려면 아래와 같이 URL
클래스와 URI
클래스를 사용하여 URL의 요소를 분리하여 적용하면 해결된다.
/** * URL에서 인코딩이 필요한 부분만 escape해서 리턴해줌 * URLEncoder.encode()를 사용하면 입력된 모든 문자열을 인코딩함. 그래서 이걸 써야함. * @param urlStr * @return */ public static String escapeURL(String urlStr) { String result = null; if (urlStr == null) { return result; } try { URL url = new URL(urlStr); URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef()); result = uri.toASCIIString(); } catch (Exception e) { e.printStackTrace(); } return result; }
로그인하면 댓글을 남길 수 있습니다.