Fehler im Highlight-Script

MsWord

Mitglied
Hallo,

ich habe ein Highlight-Script geschrieben welches aber noch ein Fehler hat, aber ich weiß nicht wie ich diesen umgehen kann.
Oder wie man es besser machen kann.

PHP:
<? 
function highlightsearch($suchbegriff, $suchergebnis){ 
    $suchbegriff2 = ucfirst($suchbegriff); 
    $suchbegriff3 = strtolower($suchbegriff); 
    $suchergebnis2 = $suchergebnis; 
    $suchergebnis = str_replace ($suchbegriff2,'<strong class="txthighlight">'.$suchbegriff2.'</strong>',$suchergebnis2); // Anfang Gross 
    $suchergebnis = str_replace ($suchbegriff3,'<strong class="txthighlight">'.$suchbegriff3.'</strong>',$suchergebnis); // alles klein 
    $suchergebnis = str_replace ($suchbegriff,'<strong class="txthighlight">'.$suchbegriff.'</strong>',$suchergebnis); // so wie in der Eingabe 
    return $suchergebnis; 
}
echo highlightsearch('War', 'Ich war schon lange zuhause');

(Soll) Funktion: Es soll das gesuchte Wort, egal wie es geschrieben wird, das Wort highlighten, nur wenn ich jetzt bestimmte Buchstaben eingebe, sucht er auch im html-code der vorherigen Ersetzung wodurch dieser dann sichtbar wird.

Ich hoffe mein Problem ist verständlich :/

Wenn nicht erstelle ich noch ein Beispiel.
 
Wo kommen die Daten denn her? Du solltest die Ersetzung vor der Ausgabe machen, und nicht im Quelltext wühlen.
Diese Funktion gibt einen String oder ein Array zurück, in dem alle Vorkommen von search innerhalb von subject durch den angegebenen replace-Wert ersetzt wurden.
Ausserdem hast Du Umlautprobleme: "schü" sollte doch Schützenfest finden?
 
Also bei mir gibt es keine Umlautprobleme... wenn ich "schü" eingebe kommt bei mir auch "Schützenfest" raus.

Die Daten kommen aus meiner Datenbank hier mal das Script:

PHP:
<?

function highlightsearch($suchbegriff, $suchergebnis){ 
    $suchbegriff2 = ucfirst($suchbegriff); 
    $suchbegriff3 = strtolower($suchbegriff); 
    $suchergebnis2 = $suchergebnis; 
    $suchergebnis = str_replace ($suchbegriff2,'<strong class="txthighlight">'.$suchbegriff2.'</strong>',$suchergebnis2); // Anfang Gross 
    $suchergebnis = str_replace ($suchbegriff3,'<strong class="txthighlight">'.$suchbegriff3.'</strong>',$suchergebnis); // alles klein 
    $suchergebnis = str_replace ($suchbegriff,'<strong class="txthighlight">'.$suchbegriff.'</strong>',$suchergebnis); // so wie in der Eingabe 
    return $suchergebnis; 
}


//  [...]


function gigs($search){
	$t_now = time() - 10*3600;
	if($search != 'Suche'){
	 $sel = mysql_query("Select * From gigmanager_new Where timest_bis > '$t_now' AND name Like '%".$search."%' Order by timest");
	 $anz = mysql_num_rows($sel);
	} else {
	 $sel = mysql_query("Select * From gigmanager_new Where timest_bis > '$t_now' Order by timest");
	 $anz = mysql_num_rows($sel);
	}
	while($out = mysql_fetch_array($sel)){
	 $title 		= highlightsearch($search, $out['name']);
	 $gdes			= NULL;
	 $gort			= NULL;
	 $timest		= NULL;
	 $description 	= nl2br(implode(' ', array_slice(explode(' ', $out['description']), 0, 30)));
	 $descriptions	= count(explode(' ', $out['description']));
	 $kat		 	= kategorie($out['kat']);
	 $kate		 	= $out['kat'];
	 $id 		 	= $out['id'];
	 $type 		 	= $out['privat'];
	 $user 		 	= dbout('vorname', 'id', $out['person'], 'user');
	 $timest		= $out['timest'];
	 if(empty($timest)) $timest = time();
	 $time_to	 	= wday($out['timest_bis']).' '.date('d.m.Y', $out['timest_bis']);
	 $time 			= wday($timest).' '.date('d.m.Y', $timest).' um '.date('H:i', $timest);
	 $time_from		= wday($timest).' '.date('d.m.Y', $timest);
	 $ort			= explode(', ',$out['ort']);
	 $ortn			= NULL;
	 if($desctiptions > 30) $desctiption .= ' ...';
	 if($kate == 2) $time = $time_from.' bis '.$time_to;
	 if(!empty($ort[0])) $ortn .= $ort[0];
	 if(!empty($ort[1])) $ortn .= ' '.$ort[1];
	 if(!empty($ort[2])) $ortn .= ', '.$ort[2];
	 if(!empty($ort[3])) $ortn .= ' '.$ort[3];
	 if(!empty($ortn)) $gort = '<span class="gig-ort">'.$ortn.'</span><br>';
	 if(!empty($description)) $gdes = '<span class="gig-des">'.$description.'</span>';
	 $ausgabe 	   .= g_template($kat, $kate, $title, $gort, NULL, $time, $veranstalter, $id, $user, false, $type, false, NULL, NULL, NULL, NULL, NULL);
	}
	if($anz == 0) $ausgabe = '<center><em><br><br>Es wurden keine Termine gefunden.</em></center>';
	if($anz == 0 && !empty($search)) $ausgabe = '<center><em><br><br>Unter diesem Begriff konnte kein Termin gefunden werden.</em></center>';
	return $ausgabe;
}
?>
 
Bild1.jpg
Was wird denn durchsucht?
Was beinhaltet der zu durchsuchende String? Das ist offensichtlich nicht auf DB Ausgabe beschränkt, oder es ist HTML,CSS in der DB gespeichert.
 
Durchsucht wird in der DB nur der Name der Veranstaltung.

Bei mir schaut es so aus
ausgabe.png

HTML oder CSS werden nicht mit in der DB gespeichert, dort steht wirklich nur der name wie so z.B. "Schützenfest".
ü = ü

Der HTML / CSS teil kommt bei der Funktion gtemplate erst dazu, aber ich ließ es raus da dort kein Problem vorliegt.

Das Problem welches besteht ist mir bekannt, ich weiß nur nicht wie ich es am einfachsten lösen kann.

Das Problem ist einfach das, bei dem Highlightscript die zweite Ersetzung die erste mit durchsucht wo auch der HTML-Tag eingefügt wurde. Somit sucht die zweite Ersetzung auch in dem HTML-Tag.
 
Das Problem ist einfach das, bei dem Highlightscript die zweite Ersetzung die erste mit durchsucht wo auch der HTML-Tag eingefügt wurde. Somit sucht die zweite Ersetzung auch in dem HTML-Tag.
PHP:
$suchergebnis = str_replace ($suchbegriff2,'<strong class="txthighlight">'.$suchbegriff2.'</strong>',$suchergebnis2); // Anfang Gross
$suchergebnis = str_replace ($suchbegriff3,'<strong class="txthighlight">'.$suchbegriff3.'</strong>',$suchergebnis); // alles klein
$suchergebnis = str_replace ($suchbegriff,'<strong class="txthighlight">'.$suchbegriff.'</strong>',$suchergebnis); // so wie in der Eingabe
Das hier meinst Du? Warum tust Du das 3 mal?
Erstaunlich ist, dass Du bei "schü" ein Ergebnis erhälst und ich nicht.
 
das mit dem erbenis wundert mich auch sehr...

ich mache das er das alles nach drei verschiedenen Möglichkeiten kontrolliert wie es geschrieben wurde. Mir wäre auch lieber wenn ich mit einer Funktion das Wort herrausfinden könnte egal wie es geschrieben wurde, aber dazu viel mir nix ein wie man das machen könnte... andere sagten das kann man auch mit preg_match machen nur da habe ich mit den ganzen Zeichen keinen durchblick was da nun und wie rein muss..
 
Ich denke da eher an preg_replace.
PHP:
$Suchmuster       = '/'.$_was_du_suchst.'/i'; // i ignoriert Groß-Kleinschreibung
$Ersatz           = '<span style="font-weight: bold;">'.$_was_du_suchst.'</span>';
$Zeichenkette     = $_was durchsucht_werden_soll;
$Ausgabeersetzung = preg_replace($Suchmuster, $Ersatz, $Zeichenkette);
 
Zurück