Ankündigung

Einklappen
Keine Ankündigung bisher.

highlighting in einer html-seite

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • highlighting in einer html-seite

    ich versuche, in einer (beliebigen) html seite bestimmte wörter farblich zu hinterlegen. so klappt das schon ganz gut:
    Code:
    $body = str_replace($keys[$i], '<span style="background-color:'.$highlightcolors[$i].';color:black;">'.$keys[$i].'</span>', $body);
    wenn jetzt aber $keys[$i] beispielsweise div ist und die html-seite so aussieht:
    Code:
    <html>
    <body>
    <div>this is a div</div>
    </body>
    </html>
    krieg ich logischerweise sowas raus:
    Code:
    <html>
    <body>
    <<span style="background-color:yellow;color:black;">div</span>>this is a <span style="background-color:yellow;color:black;">div</span></<span style="background-color:yellow;color:black;">div</span>>
    </body>
    </html>
    wodurch ja die ganze seite für den a**** wird...
    jetzt meine frage, wie verhindere ich möglichst einfach, dass <div> auch ersetzt wird?
    ähnliche probleme gibt es auch bei zB $keys[$i] = 'hallo'
    und hallo.
    ich habe mir gedacht, dass dads vielleicht mit einem eregi_replace() gehen könnte, aber so gut kenn ich mich mit der syntax nicht aus, dass ich einen solchen ausdruck aufstellen könnte...
    http://www.silvercoding.de
    ------------
    ElePHPant Edit

  • #2
    DU musst das einfach mit preg_replace (eregi sind langsamer) und einem ausdruck machen, welcher dir sagt, ersetze "bla" durch "bla" wenn "bla" nicht innerhalb von <[A-Za-z0-9 "']/ /[A-Za-z0-9 "']>.
    Ein gutes tutorial zu Regulären Ausdrücken die Perl kompatibel sind findest du hier: http://www.amk.ca/python/howto/regex/regex.html

    Eine andere möglichkeit währe, alles erstmal in einen array aufzuteilen:
    Code:
    <?php
    $html = '<html><blubb>blubb</blubb></html>';
    $keys = array('bla', 'blubb');
    print html_hl_keys($html, $keys);
    
    function html_hl_keys($html, $keys)
    {
      $html = str_replace('<', '<\\<', $html);
      $html = str_replace('>', '>\\>', $html);
      $html = explode('<\\', $html);
      for($i=0;$i<count($html);$i++)
      {
        $html[$i] = explode('\\>', $html[$i]);
      }
      for($i=0;$i<count($html);$i++)
      {
        for($x=0;$x<count($html[$i]);$x++)
        {
          $strstr = strstr($html[$i][$x], '<');
          if( empty($strstr) )
          {
            for($y=0;$y<count($keys);$y++)
            {
              $html[$i][$x] = str_replace($keys[$y], ''.$keys[$y].'' , $html[$i][$x]);
            }
          }
        }
        $html[$i] = implode($html[$i]);
      }
      $html = implode($html);
      return $html;
    }
    ?>

    Kommentar


    • #3
      ok, thx! war schon seeehr hilfreich! aber so gut, dass ich einen solchen ausdruck jetzt selbst schreiben könnte, bin ihc immer noch nicht
      hab deßhalb mal im internet recherchiert, und siehe da was ich gefunden hab:
      Code:
      $body = preg_replace('/((<[^>]*)|'.$keys[$i].')/ie', '"\2"=="\1"? "\1":"<span style=\"color:black;background-color:'.$highlightcolors[$i].'\">'.$keys[$i].'</span>"',$body);
      so funktioniert es jetzt wunderbar.
      ich hab das von hier:
      http://www.geo.tu-freiberg.de/docs/p...aq/regexp.html
      da stehen viele nützliche sachen, zB auch wie man relative uri's und so ersetzt
      http://www.silvercoding.de
      ------------
      ElePHPant Edit

      Kommentar

      Lädt...
      X