Michi: Wie unterscheidet man in einer HTTP-Ausgabe Text von HTML?

Hallo,

programmier grad eine Suchfunktion für Webseiten, die fertigen gefallen mir und Kunden nicht. :)

1. Teil - Vorschau: Im per file_get_contents eingelesenen und um HTML-Code beschnittenen (html_entity_decode() ) Seitentext wird der eingegebene Suchstring über ein str_replace() fett dargestellt.
Funktioniert prima.

2. Teil - Aufrufen der URL über den angebauten Link:

Jetzt ginge es darum, auch auf der angelinkten Seite den Text nochmal irgendwie hervorgehoben darzustellen, fett oder mit Hintergrundfarbe, wie auch immer. Das Problem besteht nun darin, dass ich ja nicht mehr nur einen Textauszug, sondern die ganze Seite darstellen muss und dabei keinen HTML-Code mehr rausschneiden kann, allerdings muss ich irgendwie unterscheiden zwischen Text und HTML-Code, denn sonst werden unter Umständen HTML-Tags in diesen Bearbeitungsprozess eingebunden, damit verhunzt, fehlerhafter Code entsteht.
Z.B.:

suchausgabe.php?url=http://www.ecostra.de/news/&suchtext=wi

Hier würden nicht nur alle "wi" im Text hervorgehoben dargestellt, sondern z.B. auch das "width"-Attribut...

Gibt es irgendeine PHP-Funktion, die mir sagt, ob es sich bei Zeichen x in einem String um ein HTML-Tag handelt? So was in der Art wäre praktisch. (Das ganze Dokument zu parsen stell ich mir jedenfalls zu aufwändig vor.) ;)

Oder kennt jemand einen anderen Trick, um die Anforderung, bestimmte Strings (und zwar nur reinen Text, nicht HTML-Code) in einem eingelesenen HTTP-Dokument hervorgehoben darzustellen, vielleicht auch über JavaScript?

Gruß Michi

  1. Hi,

    allerdings muss ich irgendwie unterscheiden zwischen Text und HTML-Code,

    HTML ist der Teil, der wo umschlossen ist von "<" und ">". ;)

    Oder kennt jemand einen anderen Trick, um die Anforderung, bestimmte Strings (und zwar nur reinen Text, nicht HTML-Code) in einem eingelesenen HTTP-Dokument hervorgehoben darzustellen, vielleicht auch über JavaScript?

    Googel mal nach highlight.js

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  2. Hallihallo!

    Wie Cybaer schon angedeutet hat, ist HTML im eigentlichen Dokument Alles, was zwischen "<" und ">" steht.
    Ich sehe hier einen Einsatzfall für reguläre Ausdrücke:

      
    $s = $Suchbegriff  
    $t = '<b>'.$Suchbegriff.'</b>';   // oder wie auch immer die Hervorhebung sein soll  
      
    $whatever = preg_replace("/((<[^>]*)|$s)/ie", '"$2"=="$1" ? "$1" : "$t"', $whatever);  
    
    

    Dieser kleine Schnippsel ersetzt den gefundenen Text nur dann, wenn er nicht zwischen "<" und ">" steht. Man muss nur darauf achten, daß $Suchbegriff keine Zeichen enthält, denen in regulären Ausdrücken eine besondere Bedeutung zuteil wird.

    Viele liebe Grüße,
    Der Dicki