[GastForen Programmierung/Entwicklung PHP und MySQL php - HTML Suchscript -> Resultate anzeigen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

php - HTML Suchscript -> Resultate anzeigen

sejau
Beiträge gesamt: 298

28. Sep 2011, 18:42
Beitrag # 1 von 2
Bewertung:
(1588 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen

Ich versuche gerade mit einem PHP-SCript statische html-Seiten zu durchsuchen (nach strings), mit preg_match_all.

Bisher geht eigentlich alles gut;

Ich lese alle Files im directory aus, und durchsuche sie dann nach dem eingegeben String.
Wenn ichs gefunden hab, kürze ich den Teil vor dem gesuchten String auf 15 Wörter und den Teil danach ebenfalls auf 15 Wörter.


Code
// Funktion um die Ergebnisse zu kürzen 
function trim_ergebnis($text, $start = false){
$words = preg_split('/ /', strip_tags($text), -1, PREG_SPLIT_NO_EMPTY); //strip_tags befreit von htmltags
if($start){
$words = array_slice($words, 0, 15); //gibt alle wšrter von 0 - 15 im neuen array zurŸck.und da $start == true, handelt es sich ja um den teil nach dem suchterm
}
else{
$start = count($words) - 15; //angenommen 40 wšrter - 15 = 25
$words = array_slice($words, ($start < 0 ? 0 : $start), 15); // 25< 0 dann nehme 0 als offset, sonst die gegebene zahl.
}
return implode(' ', $words);
}


Und danach lasse ich alle Ergebnisse so darstellen;

ich nutze preg_match_all
und PREG_SET_ORDER.
Das ergibt mir ein Array mit den
Code
values[0] => ganzes Suchergebnis 
values[1] => teil vor dem Suchstring
values[0] => Teil nach dem Suchstring


Am Schluss lass ich printen:

Code
		$search_results[] = array($file, $match[1].$_GET['s'].$match[2], $matches2[1]);  //multidimensionales array! 


Das heisst ich nehm den ersten Teil vor dem String (vorher noch gekürzt, hier aber nicht so wichtig), dann die Sucheingabe, und dann den Teil nach dem String.

Dies tu ich, weil ich den Suchstring hervorheben möchte;

Code
preg_match_all("/\<p\>(.*)".$_GET['s']."(.*)\<\/p\>/i", $contents, $matches, PREG_SET_ORDER); 
foreach($matches as $match){
//trmiming results to show excerpt
$match[1] = trim_ergebnis($match[1]); //$match[1] ist der teil, der vor dem gesuchten term steht, [2] derjenige danach
$match[2] = trim_ergebnis($match[2], true);
//highlighting if needed
if($highlight == true){
$match[1] .= '<span style="background: red;">';
$match[2] = '</span>'.$match[2];
}
preg_match("/\<title\>(.*)\<\/title\>/", $contents, $matches2); //$matches2 ist ein array, das nun mit den ergebnissen nach titelsuchen in den html-seiten gef&#159;llt wird.
$search_results[] = array($file, $match[1].$_GET['s'].$match[2], $matches2[1]); //multidimensionales array!

}


Nun gibts aber ein Problem, wenn der Suchstring gerade ein eigenständiges Wort ist;

Suche nach 'Ort';

1Teil des StringsOrt2Teil des Strings.
Es gibt also keine Abstände dazwischen.

Zuerst dachte ich, dass ich dann einfach nach dem 1Teil ein ' ' Leershlag und vor dem 2.Teil ebenfalls ein Leerschlag einfügen kann. Doch dann:


Suche nach; 'Ort' (in Wortkarg vorhanden)->
W ort karg

gibts hier Leerschläge dazwischen.

Nun möchte ich also prüfen, ob das Wort im ganzen Text bereits von Leerschlägen umschlossen sind, oder nicht, und dann je nachdem mit einer if-Abfrage etwas anderes anzeigen lasse.

Hat jemand eine Idee, wie ich testen kann, ob der gesuchte String im entsprechenden Ergebnis bereits von Leerschlägen umschlosse ist?
Ich komm irgendwie nicht drauf.
Hab da noch nicht ganz die Logik zu allem, weil erst gerade mit php begonnen.

Wäre echt stark, wenn jemand was wüsste.
Vielen Dank.

Gruss

sejau
X

php - HTML Suchscript -> Resultate anzeigen

sejau
Beiträge gesamt: 298

30. Sep 2011, 20:19
Beitrag # 2 von 2
Beitrag ID: #481427
Bewertung:
(1550 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hab inzwischen eine Lösung gefunden.
Ich habe dabei einen Test gemacht, ob beim Teil for dem Suchstring der letzte Character und beim Teil nach dem Suchstring der erste Character == ' ' ist.

Je nachdem habe ich dann dem Teil wieder einen Leerschlag hinzugefügt.


als Antwort auf: [#481246]

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
01.12.2022

Online
Donnerstag, 01. Dez. 2022, 10.00 - 10.45 Uhr

Webinar

Die drei ColorLogic-Programme ZePrA, CoPrA und ColorAnt sind in neuen Versionen mit vielen neuen Funktionen im Jahr 2022 veröffentlich worden oder werden in Kürze veröffentlicht (ColorAnt 9). In unserem ca. 45 minütigen kostenlosen Webinar zeigen wir Ihnen einige dieser neuen Funktionen mit dem Schwerpunkt auf Automatisierung und Produktivitätssteigerungen.

Ja

Organisator: Impressed GmbH

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=311

ColorLogic Update-Webinar ZePrA 10, CoPrA 9 und ColorAnt 9
Veranstaltungen
02.02.2023

Prozesse optimieren und effizient gestalten

Zürich
Donnerstag, 02. Feb. 2023, 08.00 - 10.00 Uhr

Digitalisierung, Webauftritt

Digitalisierung mitgestalten - Worauf kommt es an? Wie wichtig ist die Webseite? Webseite mit Word Press? Interne Prozesse optimieren

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: Birol Isik, E-Mailinfo AT bkcc DOT ch

https://digitalisierung-heute.ch/digitalisierung-informationstag-schweiz/