Programing/MySQL

mysql strip_tags function / html 제거 후 검색

2020. 10. 20. 17:39
반응형

게시판의 내용 검색시 HTML 태그가 같이 검색되어,

사용자가 원하는 값을 정확하게 찾지 못하는 것을 방지 하기위해 아래와 같이 MySQL 사용자 함수를 등록해주고,

CREATE FUNCTION `strip_tags`(s TEXT) RETURNS text CHARSET utf8
    NO SQL
BEGIN 
  DECLARE start,end INT DEFAULT 1; 
  LOOP 
    SET start = LOCATE("<", s, start);
    IF (!start) THEN RETURN s; END IF;
    SET end = LOCATE(">", s, start);
    IF (!end) THEN SET end = start; END IF;
    SET s = INSERT(s, start, end - start + 1, "");
  END LOOP;
END

검색 시 아래와 같이 등록한 MySQL 함수를 이용한다.

SELECT * FROM board WHERE strip_tags(col_content) like '%검색어%'

 

아래 PHP 코드처럼 응용하면 좀더 자연스러운 검색이 되지 않을까 한다.

단, 단어와 정확하게 일치 하는 검색 결과를 원한다면 아래의 코드는 지양하는게 좋다.

<?php
$search_string = $_GET['search_string'];

if ($search_string)
{
    // 공백을 기준으로 배열화
    $tmp_string = explode(" ", $search_string);

    foreach ($tmp_search as $k=>$v)
    {
        $array_string[] = "col_subject LIKE '%{$v}%'";
        $array_string[] = "strip_tags(col_content) LIKE '%{$v}%'";
    }

    // 배열을 문자열로 변경
    $array_string = implode(" OR ", $array_string);
    // (col_subject like '%단어1%' or strip_tags(col_content) like '%단어1%' or bd_subject like '%단어2%' or strip_tags(bd_content) like '%단어2%')
    
    $SRCH_SQL = " AND ({$array_string})";
}

$sql = "SELECT * FROM board WHERE {$SRCH_SQL}";
/* s:쿼리 실행 결과 값 처리 */
/* e:쿼리 실행 결과 값 처리 */

?>

<form method='get' action='this page'>
<input type='text' name='search_string' value='단어1 단어2'/>
<button type='submit'>Search</button>

<!-- s:검색 결과 영역 -->
<!-- e:검색 결과 영역 -->

</form>

 

반응형

'Programing > MySQL' 카테고리의 다른 글

MySQL 인덱스: B-Tree, Fulltext, Spatial의 차이와 사용법 (MySQL Index Guide: B-Tree, Fulltext, Spatial)  (5) 2025.06.25
MySQL에서 금액을 한글로 표기하는 방법  (1) 2025.05.01
MySQL 속도 측정을 위한 SQL_NO_CACHE  (0) 2021.09.08
MySQL 변수값 IN() 검색? FIND_IN_SET() 함수 이용  (1) 2018.12.31
MySQL EXPLAIN 사용하여 Query 퍼포먼스 확인.  (0) 2016.09.13
group_concat 다중 레코드를 한개 컬럼으로 출력.  (0) 2013.07.15
MySQL - 초성검색  (0) 2013.02.21
MySQL  (0) 2011.11.14
'Programing/MySQL' 카테고리의 다른 글
  • MySQL에서 금액을 한글로 표기하는 방법
  • MySQL 속도 측정을 위한 SQL_NO_CACHE
  • MySQL 변수값 IN() 검색? FIND_IN_SET() 함수 이용
  • MySQL EXPLAIN 사용하여 Query 퍼포먼스 확인.
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    It
    디자인패턴
    자바
    Java
    기초
    iT's MY LiFE
    IT블로그
    읽고 싶은 책
    JavaScript
    자바스크립트
    SQL
    블로그
    js패턴
    자바스크립트유틸
    사고 싶은 책
    IT·컴퓨터
    php
    jsp
    IT 관련
    위시리스트
Dongkkase
mysql strip_tags function / html 제거 후 검색
상단으로

티스토리툴바