본문 바로가기

프로그래밍/이것저것 일하면서

게시판 내용에서 HTML 태그 제외하고 검색하기

반응형

요약: 정규식으로 HTML 태그를 삭제하고 검색한다.

사용자의 눈으로

게시판 글 등록 시 위지윅 HTML 에디터 (summernote, CK Editor, 네이버 스마트에디터 등)를 사용해서 글을 등록하면 (당연하게도)HTML이 함께 저장된다. 에디터에 따라 <style> ... </style> 내용도 함께 저장되는 경우도 있다.

개발자가 보기에는 너무나 당연하지만, 사용자가 보기에는 내용에 안보이는 것이 검색되면 오류라고 생각한다.

예를 들어

  1. line_friends.png를 에디터의 이미지 첨부했다.
  2. 저장된 콘텐츠는 다음과 같다.
    <img src="imagepath/line_friends.png"><br>라인 캐릭터 졸귀탱!
    
  3. friend라는 단어로 검색했다.
  4. 사용자가 보기에는 라인 캐릭터 졸귀탱! 밖에 안 보이는데 해당 게시물이 검색된다.

태그 지우고 텍스트 내용만 보기

HTML을 제외하고 게시물을 보기 위해 정규식 REPLACE를 사용해보았다.

Maria DB 기준으로

select post_id
     , post_content
     , REGEXP_REPLACE(post_content, '<(/)?(img|label|table|thead|tbody|tfoot|tr|td|p|br|div|span|font|strong|b)(.|\s|\t|\n|\r\n)*?>', '') as post_text_content
from board_post

<.../> 전체를 대상으로 하지 말고, 이처럼 에디터에서 자동 입력되는 태그들만 명시적으로 적어서 없애주는 것이 좋을 것 같다. MARIA 말고도 정규식을 사용하는 REPLACE는 다른 DBMS도 다 있을 것 같다.

물론 이렇게 하면 성능이 매우 떨어진다. 인덱스를 만들든 뭐든 그 다음은 알아서 하면 되겠다.

HTML 데이터를 정리하는 일은 레거시 시스템의 데이터가 깨끗한 경우는 잘 없으므로 마이그레이션 하면서 할 경우도 많다. 예컨대 부터 전체가 들어있다던가 ㅠㅠ 뭘 하든 정규식 사용은 크게 다르지 않을 것이다.

  • 기획 단계에서 내용이 바뀌어서 실제 적용은 안 함.
반응형

개발자가 그리는 인스타툰 팔로우하세요!