hier kann jetzt auch sogar arabische buchstaben kodiert werden und er findet "alles" 
Code: Alles auswählen
<?php 
/*********************************************** 
* Suchausgabe Output 
* 
* Author      :     Willi Man 
* Copyright   :     four for business AG 
* Created     :     05-04-2004 
* Modified    :     12-07-2005, Andreas Lindner 
************************************************/ 
#System properties in use: 
#Type: searchrange, Name: include 
#Contains comma-separated list of cats to be included into search (sub-cats are included automatically) 
#Logical combination of search terms with AND or OR 
#Includes 
cInclude('classes', 'class.search.php'); 
cInclude('classes', 'class.artspec.php'); 
cInclude('classes', 'class.template.php'); 
cInclude('includes', 'functions.api.string.php'); 
cInclude("frontend", "includes/functions.navigation.php"); 
cInclude('classes', 'class.article.php'); 
#Initiliaze template object 
if (!is_object($tpl)) { 
   $tpl = new Template; 
} 
$tpl->reset(); 
#Settings 
$oArticleProp = new Article_Property(& $db, & $cfg); 
$iArtspecReference = 2; 
$cApiClient = new cApiClient($client); 
$sSearchRange = $cApiClient->getProperty('searchrange', 'include'); 
$aSearchRange = explode(',', $sSearchRange); 
#Multilingual settings 
$sYourSearchFor = mi18n("Ihre Suche nach"); 
$sMore = mi18n("weiter"); 
#Get search term and pre-process it 
if (isset ($_GET['searchterm'])) { 
   $searchterm = urldecode(strip_tags(html_entity_decode(stripslashes($_GET['searchterm'])))); 
} 
elseif (isset ($_POST['searchterm'])) { 
   $searchterm = urldecode(strip_tags(html_entity_decode(stripslashes($_POST['searchterm'])))); 
} 
$searchterm = str_replace(' + ', ' AND ', $searchterm); 
$searchterm = str_replace(' - ', ' NOT ', $searchterm); 
$searchterm_display = $searchterm; 
#Get all article specs 
$sql = "SELECT 
      idartspec, artspec 
   FROM 
      ".$cfg['tab']['art_spec']." 
   WHERE 
      client=$client AND 
      lang=$lang AND 
      online=1"; 
$db->query($sql); 
$rows = $db->num_rows(); 
$aArtspecOnline = array (); 
$aArtSpecs = array (); 
$c = 1; 
$d = 1; 
$e = 1; 
while ($db->next_record()) { 
   $aArtSpecs[] = $db->f('idartspec'); 
} 
$aArtSpecs[] = 0; 
$action = $sess->url('front_content.php'); 
if (strlen(trim($searchterm)) > 0) { 
   #Parse search term and set search options 
   $searchterm = html_entity_decode($searchterm); 
   if (stristr($searchterm, ' or ') === FALSE) { 
      $combine = 'and'; 
   } else { 
      $combine = 'or'; 
   } 
   $searchterm = str_replace(' and ', ' ', strtolower($searchterm)); 
   $searchterm = str_replace(' or ', ' ', strtolower($searchterm)); 
      $options = array ('db' => 'regexp', // use db function regexp 
      'combine' => $combine, // combine searchterms with and 
      'exclude' => true, // => searchrange specified in 'cat_tree', 'categories' and 'articles' is excluded, otherwise included (exclusive) 
      'cat_tree' => $aSearchRange, // searchrange 
      'artspecs' => $aArtSpecs, // array of article specifications => search only articles with these artspecs 
   'protected' => false); // => do not search articles or articles in categories which are offline or protected 
   $search = new Search($options); 
   $cms_options = array ("head", "html", "htmlhead", "htmltext", "text"); // search only in these cms-types 
   $search->setCmsOptions($cms_options); 
   #Execute search 
   $aSearchResults = $search->searchIndex($searchterm, ''); 
   #Build results page 
   if (count($aSearchResults) > 0) { 
      $tpl->set('s', 'result_page', mi18n("Ergebnis-Seite").':'); 
      #Build meessage 
      $message = $sYourSearchFor." '".$searchterm_display."' ".mi18n("hat $$$ Treffer ergeben").":"; 
      $message = str_replace('$$$', count($aSearchResults), $message); 
      $tpl->set('s', 'MESSAGE', $message); 
      #Number of results per page 
      $number_of_results = 10; 
      $oSearchResults = new SearchResult($aSearchResults, $number_of_results); 
      $num_res = $oSearchResults->getNumberOfResults() + $pdf_count; 
      $num_pages = $oSearchResults->getNumberOfPages(); 
      $oSearchResults->setReplacement('<strong>', '</strong>'); // html-tags to emphasize the located searchterms 
      #Get current result page 
      if (isset ($_GET['page']) AND is_numeric($_GET['page']) AND $_GET['page'] > 0) { 
         $page = $_GET['page']; 
         $res_page = $oSearchResults->getSearchResultPage($page); 
      } else { 
         $page = 1; 
         $res_page = $oSearchResults->getSearchResultPage($page); 
      } 
      #Build links to other result pages 
      for ($i = 1; $i <= $num_pages; $i ++) { 
         $nextlink = $sess->url('front_content.php?idcat='.$idcat.'&idart='.$idart.'&searchterm='.$searchterm_display.'&page='.$i.$sArtSpecs); 
         if ($i == $page) { 
            $nextlinks .= '<nobr> <strong>'.$i.'</strong> </nobr>'; 
         } else { 
            $nextlinks .= '<nobr> <a href="'.$nextlink.'" title="'.$i.'. '.mi18n("Ergebnisseite anzeigen").'">'.$i.'</a> </nobr>'; 
         } 
      } 
      $tpl->set('s', 'PAGES', $nextlinks); 
      #Build link to next result page 
      if ($page < $num_pages) { 
         $n = $page +1; 
         $next = $sess->url('front_content.php?idcat='.$idcat.'&idart='.$idart.'&searchterm='.$searchterm.'&page='.$n.$sArtSpecs); 
         $nextpage .= ' <a href="'.$next.'" title="'.mi18n("nächste Ergebnisseite anzeigen").'">'.mi18n("vor").' ></a>'; 
         $tpl->set('s', 'NEXT', $nextpage); 
      } else { 
         $tpl->set('s', 'NEXT', ''); 
      } 
      #Build link to previous result page 
      if ($page > 1) { 
         $p = $page -1; 
         //$pre = $sess->url('index-c-'.$idcat.'-'.$p.'-0.html'); 
         $pre = $sess->url('front_content.php?idcat='.$idcat.'&idart='.$idart.'&searchterm='.$searchterm.'&page='.$p.$sArtSpecs); 
         $prevpage .= '<a href="'.$pre.'" title="'.mi18n("vorherige Ergebnisseite anzeigen").'">< '.mi18n("zurück").'</a> '; 
         $tpl->set('s', 'PREV', $prevpage); 
      } else { 
         $tpl->set('s', 'PREV', ''); 
      } 
      if (count($res_page) > 0) { 
         $i = 1; 
         #Build single search result on result page 
         foreach ($res_page as $key => $val) { 
            $num = $i + (($page -1) * $number_of_results); 
            $oArt = new Article($key, $client, $lang); 
            #Get publishing date of article 
            $pub_system = $oArt->getField('published'); 
            $pub_user = trim(strip_tags($oArt->getContent('HEAD', 90))); 
            if ($pub_user != '') { 
               $show_pub_date = "[".$pub_user."]"; 
            } else { 
               $show_pub_date = ''; 
               if ($pub_system[8] != '0') { 
                  $show_pub_date .= $pub_system[8]; 
               } 
               $show_pub_date .= $pub_system[9].'.'; 
               if ($pub_system[5] != '0') { 
                  $show_pub_date .= $pub_system[5]; 
               } 
               $show_pub_date .= $pub_system[6].".".$pub_system[0].$pub_system[1].$pub_system[2].$pub_system[3]."]"; 
               $show_pub_date = "[".$show_pub_date; 
            } 
          
            #Get text and headline of current article 
            $iCurrentArtSpec = $oArticleProp->getArticleSpecification($key, $lang); 
            $aHeadline = $oSearchResults->getSearchContent($key, 'HTMLHEAD', 1); 
            $aSubheadline = $oSearchResults->getSearchContent($key, 'HTMLHEAD', 2); 
            $text = $oSearchResults->getSearchContent($key, 'HTML', 1); 
            $text = capiStrTrimAfterWord($text[0], 200); 
            $headline = capiStrTrimAfterWord($aHeadline[0], 200); # conflict with capiStrTrimAfterWord and setReplacement('<strong>', '</strong>') 
            $subheadline = capiStrTrimAfterWord($aSubheadline[0], 200); 
            $cat_id = $oSearchResults->getArtCat($key); 
            $sCatName = getCategoryName($cat_id, & $db); 
            $similarity = $oSearchResults->getSimilarity($key); 
            ob_start(); 
            printf("%.0f", $similarity); 
            $similarity = ob_get_contents(); 
            ob_end_clean(); 
            #Send output to template 
            $href = $sess->url("front_content.php?idcat=$cat_id&idart=$key"); 
            $tpl->set('d', 'more', $sMore); 
            $tpl->set('d', 'HREF', $href); 
            $tpl->set('d', 'TITLE', mi18n("Link zu Suchergebnis").' '.$i); 
            $tpl->set('d', 'NUM', $num); 
            $tpl->set('d', 'CATNAME', $headline); 
            $tpl->set('d', 'HEADLINE', $text); 
            $tpl->set('d', 'SUBHEADLINE', $subheadline); 
            $tpl->set('d', 'SIMILARITY', $similarity); 
            $tpl->set('d', 'TARGET', '_self'); 
            $tpl->set('d', 'PUB_DATE', $show_pub_date); 
            $tpl->next(); 
            $i ++; 
         } 
         $tpl->generate('templates/suchausgabe.html'); 
      } 
   } else { 
      #No results 
      $tpl->set('s', 'MESSAGE', $sYourSearchFor." '".$searchterm."' ".mi18n("hat leider keine Treffer ergeben")."."); 
      $tpl->set('s', 'NEXT', ''); 
      $tpl->set('s', 'PREV', ''); 
      $tpl->set('s', 'PAGES', ''); 
      $tpl->set('s', 'result_page', ''); 
      $tpl->generate('templates/suchausgabe.html'); 
   } 
} 
class Article_Property { 
   var $globalConfig; 
   var $oDBInstance; 
   /** 
    * Constructor 
    * Hint: Call constructor with Article_Property(&$db, &$cfg); 
    * @param  oDBInstance instance of class DB_Contenido 
    * @param  globalConfig 
    */ 
   function Article_Property($oDBInstance, $globalConfig) { 
      $this->globalConfig = $globalConfig; 
      $this->oDBInstance = $oDBInstance; 
   } 
   /** 
    * Get specification of an article 
    * 
    * @param     $iArticleId 
    * @return  id of article specification 
    */ 
   function getArticleSpecification($iArticleId, $iLangId) { 
      $sqlString = "    
                 SELECT 
                     artspec 
                  FROM 
                     ".$this->globalConfig['tab']['art_lang']." 
                  WHERE 
                     idart = '".$iArticleId."' AND 
                  idlang = '".$iLangId."' 
                  "; 
      #echo "<pre>$sqlString</pre>"; 
      $this->oDBInstance->query($sqlString); 
      if ($this->oDBInstance->next_record()) { 
         return $this->oDBInstance->f('artspec'); 
      } else { 
         return false; 
      } 
   } 
} 
?>