MySql 정규 표현식으로 HTML 제거 후 Mybatis 적용하기
개인적으로 만들고 있는 사이트에 DB에 저장된 글자 중 HTML 문자를 제거하고 출력하는 일은 정규 표현식을 활용해 간단히 처리할 수 있으며 관련 자료도 많이 있습니다.
간단히 더미 테이블을 사용해 테스트 용도로 확인해 보시면 HTML 태그가 삭제된 데이터만 출력됩니다.
/*
정교 표현식을 사용해 My SQL HTML 데이터 제거후 쿼리로 보내주기
*/
SELECT '<html><head><title>table example</title></head><body><h3>2행3열 테이블</h3><table border="1" width="100%"><tr><td>1</td><td><b>2</b></td></tr><tr><td>3</td><td>4</td></tr><tr><td>5</td><td>6</td></tr></table></body></html>' AS data,
REGEXP_REPLACE('<html><head><title>table example</title></head><body><h3>2행3열 테이블</h3><table border="1" width="100%"><tr><td>1</td><td><b>2</b></td></tr><tr><td>3</td><td>4</td></tr><tr><td>5</td><td>6</td></tr></table></body></html>',
'<[^>;]*>', '') AS html_del
FROM DUAL;
위처럼 간단히 쿼리문에서 HTML 문자를 제거할 수 있지만 스프링 환경에 Mybatis를 이용해 데이터를 출력하신다면 쿼리문을 조금 수정해서 적용해 주셔야 합니다. 정규 표현식엔 XML 문서 규칙에 맞지 않는 문자들이 섞여 있어 해당 문자는 변환해서 작성해 주셔야 합니다.
MySQL 더미 테이블에서 수정한 내용 그대로 쿼리를 실행하면 HTML이 제거 되지 않는 상태로 나오지만 Mybatis XML 문서 적용후 데이터를 확인 하시면 HTML 관련 문자가 삭제 되어 출력 되니 참고 하시면 좋을 것 같습니다.
/*
DB 조회된 결과를 마이바티스 XML에 적용 하시려면?
왼쪽 꺽쇠 오른쪽 꺽쇠 기호를 < >로 변경해서 적용하셔야 됩니다.
*/
SELECT '<html><head><title>table example</title></head><body><h3>2행3열 테이블</h3><table border="1" width="100%"><tr><td>1</td><td><b>2</b></td></tr><tr><td>3</td><td>4</td></tr><tr><td>5</td><td>6</td></tr></table></body></html>' AS data,
REGEXP_REPLACE('<html><head><title>table example</title></head><body><h3>2행3열 테이블</h3><table border="1" width="100%"><tr><td>1</td><td><b>2</b></td></tr><tr><td>3</td><td>4</td></tr><tr><td>5</td><td>6</td></tr></table></body></html>',
'<[^>]*>', '') AS html_del
FROM DUAL;
그런데 추가로 한가지 문제가 있더군요. DB에서 출력된 데이터 중 문자는 걸러지지 않고 그대로 데이터가 나옵니다. 쿼리문 안에서 모두 해결하고 싶었지만 DB에서 받은 문자 데이터를 JAVA로 대충 처리해 버렸습니다.
replaceAll(" ", " ");
Mysql 정규표현식을 사용해 HTML을 제거하고 Mybatis에 적용하려면 어떤 것을 수정해야 하는지 간략히 정리해 봤습니다. 혹시라도 쿼리 자체 안에서 문자까지 모두 제거 후 출력 가능하다면 댓글 달아 주시면 감사드리겠으며 필요하신 분들에겐 도움이 되는 내용이 되었기를 바랍니다.