,=,?,!,#,^,(,),[,\],:,;,\\\,%]/","",$text); /* * * for jp * * * * * * * * * * */ $this->encoding = strtolower(preg_replace('|[^a-z0-9-_]|i', '', _CHARSET)); if ($this->encoding != 'utf-8') { $text = mb_convert_encoding($text, "UTF-8", $this->encoding); } $text = str_replace ("\xE3\x80\x80",' ',$text); $text = preg_replace ("/[<>=?!#^()[\]:;\\%]/","",$text); $this->ascii = '[\x00-\x7F]'; $this->two = '[\xC0-\xDF][\x80-\xBF]'; $this->three = '[\xE0-\xEF][\x80-\xBF][\x80-\xBF]'; $this->jpmarked = $this->boolean_mark_atoms_jp($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 = sql_fetch_object($res)) { $this->blogs[] = intval($obj->bnumber); } } function boolean_sql_select($match) { if (!isset($stringsum)) { $stringsum = ''; } if (strlen($this->inclusive) > 0) { /* build sql for determining score for each record */ $result=explode(" ",$this->inclusive); if (!isset($stringsum_long)) { $stringsum_long = ''; } for ($cth = 0; $cth < count($result); $cth++) { if (strlen($result[$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,}\))", "(\-\(([A-Za-z0-9]|$this->two|$this->three){1,}([A-Za-z0-9\-\.\_\,]|$this->two|$this->three){0,}\))", '', $result); /* $result=preg_replace( // "(\-[A-Za-z0-9]{1,}[A-Za-z0-9\-\.\_]{0,})", "(\-([A-Za-z0-9]|$this->two|$this->three){1,}([A-Za-z0-9\-\.\_\,]|$this->two|$this->three){0,})", '', $result); */ $result = str_replace('(', ' ', $result); $result = str_replace(')', ' ', $result); $result = str_replace(',', ' ', $result); if ($this->encoding != 'utf-8') { $result = mb_convert_encoding($result, $this->encoding, "UTF-8"); } 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); */ $result = $this->jpmarked; /* for jp */ $result = $this->boolean_sql_where_jp_short($result, $match);/* for jp */ if ($this->encoding != 'utf-8') { $result = mb_convert_encoding($result, $this->encoding, "UTF-8"); } 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