Keresés html-t tartalmazó mezőben - mysql
Nézzük meg, hogy hogyan lehet keresni egy olyan mezőben, amiben html-t tárolunk - például egy TinyMCE által szerkeztett tartalamat -, és szeretnénk keresni az “árvíztűrő tükörfúrógép”-re, de azt a szerkesztő így írta le: “árvíztűrő <b>tükörfúrógép</b>”. A válasz egyszerű: sehogy. Értelmesen, erőforrást kímélve sehogy. A mysql regexp eleve buta, soronként nézni a táblát megintcsak rossz. A megfejtés egy plusz mező segítségül hívása, ami tartalmazza a html szöveg tag-ek és írásjelek nélküli verzióját. Ismét nem spanyol viasz, de a kezdő cms fejlesztőknek jól jöhet a tipp. Lássuk hogy!
Ott tartunk, hogy a $_POST["content"] változóban megvan a postolt html szöveg, két dolgot kell tenni:
- eltávolítani a html tagokat
- eltávolítani az írásjeleket
HTML tag-ek eltávolítása:
function html2text($dokumentum) {
$mit = array ("'<script[^<]*?>.*?</script>'si",
"'<[\/\!]*?[^<>]*?>'si",
"'([\r\n])[\s]+'",
"'&(quot|#34);'i",
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&#(\d+);'e");
$mire = array ("",
"",
" ",
"\"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\\1)");
return htmlspecialchars(preg_replace ($mit, $mire, $dokumentum));
}
Majd az írásjelek eltávolítása:
function keyword_extract($text){
$nohtml = array(""","<",">");
$html = array("\"","<",">");
$text = str_replace($nohtml,$html, $text);
$text = strtolower($text);
$punc =". , : ; ' ? • ! | ( ) \" \\ < > { } /";
$punc = explode(" ",$punc);
foreach($punc as $value){
$text = str_replace($value, " ", $text);
}
$text = str_replace(" ", "", $text);
$keywords = explode(" ", $text)
foreach ($keywords as $index => $value) {
$keywords[$index] = trim($keywords[$index]);
if ($keywords[$index]=="") unset($keywords[$index]);
}
return implode(" ",$keywords);
}
Használat:
$plain_content = html2text($_POST["content"]); $plain_content = keyword_extract($plain_content);
$plain_content tartalmazza a tiszta szöveget, ami mehet a plusz mezőnkbe. A megszokott “like ‘%valami szöveg%’ ” formában kereshetünk. Ne feledjük indexelni ezt a mezőt.

http://zsir.blog.hu/2008/05/23/tipikus_hibak_regisztraciokor_1