2014-11-29 1 views
3

나는 이것을 너무 많이 검색했으며 몇 가지 결과를 발견했지만 그 중 일부는 작동하지 않았습니다. MySQL 쿼리를 사용하여 내 게시물 테이블에서 제목 및 콘텐츠를 검색하고 있습니다. 내 문제는 HTML 태그가 포함 된 TinyMCE를 사용하여 데이터가 저장된다는 것입니다. HTML 태그를 무시하도록 내 검색어가 관련없는 결과를 반환하지 않도록하고 싶습니다.
내 쿼리 : 당신은 여전히 ​​MySQL의에서이 작업을 수행하려면이
MySQL을 검색하는 동안 저장된 데이터에서 HTML 태그를 무시하십시오.

SELECT posts.id, posts.title, posts.date, posts.tags, posts.image, users.name, users.screen_name, users.id as user_id, 
    IF(
     posts.title LIKE '$searchTerm%', 20, 
     IF(posts.title LIKE '%$searchTerm%', 10, 0) 
    ) 
    + IF(posts.post LIKE '%$searchTerm%', 5, 0) 
    AS weight 
FROM posts 
LEFT JOIN users ON posts.user_id=users.id 
WHERE (
    posts.title LIKE '%$searchTerm%' 
    OR posts.post LIKE '%$searchTerm%' 
) 
ORDER BY weight DESC 
LIMIT 100 
+0

"HTML 태그 무시"를 정의하십시오. 당신이 무시하려고하는 것에 대한 예를 들려 줄 수 있습니까? 고의적으로 링크를 검색하면 어떻게됩니까? HTML 컨텐트를 반향하는 것만으로도 사이트의 보안 문제가 될 수 있습니다 ... –

+0

HTML이 TinyMCE 텍스트 편집기에서 출력됩니다. 텍스트 만 검색하고 싶습니다. 예를 들어, TinyMCE는 "TEST TEXT"를 "

TEST TEXT

"으로 출력합니다. 그 순간에 "p"를 검색하면이 결과가 반환되어 MySQL에 저장된 HTML 태그를 무시하도록 검색 쿼리를 수행하므로 "p"를 검색하면 아무것도 반환하지 않지만 "TEST"를 검색하면 이 결과를 –

+0

으로 반환하면 XML/HTML 파서의 일종을 연결해야하므로 태그를 제거 할 수 있습니다. 정규 표현식은 파싱에 적합하지 않으며'LIKE '에 의해 제공되는 기본 능력은 더욱 악화됩니다. 대부분의 RDBMS에는 이것에 대한 라이브러리/애드온이 있습니다. 아마도 MySQL도 마찬가지입니다. –

답변

0

PHP를 기능, 당신을 여기

strip_tags($text); 
당신은 찾을 수

자세한 내용은 http://php.net/manual/en/function.strip-tags.php

을 수행 할 수 있습니다 자신의 기능을 정의해야 함

delimiter || 
DROP FUNCTION IF EXISTS strip_tags|| 
CREATE FUNCTION strip_tags(x longtext) RETURNS longtext 
LANGUAGE SQL NOT DETERMINISTIC READS SQL DATA 
BEGIN 
DECLARE sstart INT UNSIGNED; 
DECLARE ends INT UNSIGNED; 
SET sstart = LOCATE('<', x, 1); 
REPEAT 
SET ends = LOCATE('>', x, sstart); 
SET x = CONCAT(SUBSTRING(x, 1 ,sstart -1) ,SUBSTRING(x, ends +1)) ; 
SET sstart = LOCATE('<', x, 1); 
UNTIL sstart < 1 END REPEAT; 
return x; 
END; 
|| 
delimiter ; 

함수를 정의한 후에 검색어로 함수를 호출하십시오.

$q="CALL strip_tags(SELECT textarea FROM table where ....)" 
관련 문제