,=,?,!,#,^,(,),[,\],:,;,\\\,%]/","",$text); $this->querystring = $text; $this->marked = $this->boolean_mark_atoms($text); $this->inclusive = $this->boolean_inclusive_atoms($text); $this->blogs = array(); // get all public searchable blogs, no matter what, include the current blog allways. $res = sql_query('SELECT bnumber FROM '.sql_table('blog').' WHERE bincludesearch=1 '); while ($obj = mysql_fetch_object($res)) $this->blogs[] = intval($obj->bnumber); } function boolean_sql_select($match){ if (strlen($this->inclusive) > 0) { /* build sql for determining score for each record */ $result=explode(" ",$this->inclusive); for($cth=0;$cth=4){ $stringsum_long .= " $result[$cth] "; }else{ $stringsum_a[] = ' '.$this->boolean_sql_select_short($result[$cth],$match).' '; } } if(strlen($stringsum_long)>0){ $stringsum_long = addslashes($stringsum_long); $stringsum_a[] = " match ($match) against ('$stringsum_long') "; } $stringsum .= implode("+",$stringsum_a); return $stringsum; } } function boolean_inclusive_atoms($string){ $result=trim($string); $result=preg_replace("/([[:space:]]{2,})/",' ',$result); /* convert normal boolean operators to shortened syntax */ $result=eregi_replace(' not ',' -',$result); $result=eregi_replace(' and ',' ',$result); $result=eregi_replace(' or ',',',$result); /* drop unnecessary spaces */ $result=str_replace(' ,',',',$result); $result=str_replace(', ',',',$result); $result=str_replace('- ','-',$result); $result=str_replace('+','',$result); /* strip exlusive atoms */ $result=preg_replace( "(\-\([A-Za-z0-9]{1,}[A-Za-z0-9\-\.\_\,]{0,}\))", '', $result); $result=str_replace('(',' ',$result); $result=str_replace(')',' ',$result); $result=str_replace(',',' ',$result); return $result; } function boolean_sql_where($match){ $result = $this->marked; $result = preg_replace( "/foo\[\(\'([^\)]{4,})\'\)\]bar/e", " 'match ('.\$match.') against (\''.\$this->copyvalue(\"$1\").'\') > 0 ' ", $result); $result = preg_replace( "/foo\[\(\'([^\)]{1,3})\'\)\]bar/e", " '('.\$this->boolean_sql_where_short(\"$1\",\"$match\").')' ", $result); return $result; } // there must be a simple way to simply copy a value with backslashes in it through // the preg_replace, but I cannot currently find it (karma 2003-12-30) function copyvalue($foo) { return $foo; } function boolean_mark_atoms($string){ $result=trim($string); $result=preg_replace("/([[:space:]]{2,})/",' ',$result); /* convert normal boolean operators to shortened syntax */ $result=eregi_replace(' not ',' -',$result); $result=eregi_replace(' and ',' ',$result); $result=eregi_replace(' or ',',',$result); /* strip excessive whitespace */ $result=str_replace('( ','(',$result); $result=str_replace(' )',')',$result); $result=str_replace(', ',',',$result); $result=str_replace(' ,',',',$result); $result=str_replace('- ','-',$result); $result=str_replace('+','',$result); // remove double spaces (we might have introduced some new ones above) $result=trim($result); $result=preg_replace("/([[:space:]]{2,})/",' ',$result); /* apply arbitrary function to all 'word' atoms */ $result_a = explode(" ",$result); for($word=0;$word