소스 검색

SQL : petits changement recherche

Traite mieux les caractères spéciaux.
Permet par exemple une recherche sur des mots contenant des apostrophes,
ou le signe pourcentage, etc.
Il faudra toujours essayer d'améliorer la recherche en particulier
lorsque plusieurs mots sont fournis
Alexandre Alapetite 12 년 전
부모
커밋
a1f8bade61
2개의 변경된 파일18개의 추가작업 그리고 12개의 파일을 삭제
  1. 17 11
      app/Models/EntryDAO.php
  2. 1 1
      lib/Minz/Request.php

+ 17 - 11
app/Models/EntryDAO.php

@@ -309,18 +309,24 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo {
 			$where .= 'AND (e1.id >= ' . $date_min . '000000 OR e1.is_favorite = 1 OR f.keep_history = 1) ';
 			$joinFeed = true;
 		}
-		$terms = array_unique(explode(' ', trim($filter)));
-		sort($terms);	//Put #tags first
 		$search = '';
-		foreach ($terms as $word) {
-			if (!empty($word)) {
-				if ($word[0] === '#' && isset($word[1])) {
-					$search .= 'AND e1.tags LIKE ? ';
-					$values[] = '%' . $word .'%';
-				} elseif (!empty($word)) {
-					$search .= 'AND (e1.title LIKE ? OR UNCOMPRESS(e1.content_bin) LIKE ?) ';
-					$values[] = '%' . $word .'%';
-					$values[] = '%' . $word .'%';
+		if ($filter !== '') {
+			$filter = trim($filter);
+			$filter = addcslashes($filter, '\\%_');
+			$terms = array_unique(explode(' ', $filter));
+			sort($terms);	//Put #tags first
+			foreach ($terms as $word) {
+				$word = trim($word);
+				if (strlen($word) > 0) {
+					if ($word[0] === '#') {
+						if (isset($word[1])) {
+							$search .= 'AND e1.tags LIKE ? ';
+							$values[] = '%' . $word .'%';
+						}
+					} else {
+						$search .= 'AND CONCAT(e1.title, UNCOMPRESS(e1.content_bin)) LIKE ? ';
+						$values[] = '%' . $word .'%';
+					}
 				}
 			}
 		}

+ 1 - 1
lib/Minz/Request.php

@@ -30,7 +30,7 @@ class Minz_Request {
 		return self::$params;
 	}
 	static function htmlspecialchars_utf8 ($p) {
-		return htmlspecialchars($p, ENT_QUOTES, 'UTF-8');
+		return htmlspecialchars($p, ENT_COMPAT, 'UTF-8');
 	}
 	public static function param ($key, $default = false, $specialchars = false) {
 		if (isset (self::$params[$key])) {