Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] PHP Text hervorheben Tags ausschließen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] PHP Text hervorheben Tags ausschließen

    Hallo,
    Folgende Situation:
    Ich habe einen String mit html tags, im welchen ich bestimmte Zeichen hervorheben möchte, hierzu benutze ich derzeit folgendes Script:
    PHP-Code:
      function highlightPhrase $strHaystack$strNeedle,    
                                 
    $strColor ''$bCase FALSE 
      { 
        if ( empty ( 
    $strColor ) ) 
        { 
          
    // Standardfarbe: Rot 
          
    $strColor 'ff0000'
        } 

        
    $strModifier ''
        if ( 
    $bCase 
        { 
          
    // Modifikator "i": Groß- und Kleinschreibung ignorieren. 
          
    $strModifier 'i'
        } 

        
    $strQuotedNeedle preg_quote $strNeedle'/' ); 

        
    $strPattern '/' $strQuotedNeedle '/' $strModifier
        
    $strReplacement '<span style="color: #' $strColor ';">$0</span>'

        return 
    preg_replace $strPattern$strReplacement$strHaystack ); 
      } 
    Das Script funktioniert soweit einwandfrei, aber wenn man nach HTML Tag Bestandteilen sucht z.B. img dann versucht das Script diese hervorzuheben und die Website sieht auch dementsprechend aus. Kann mir jemand Helfen?

  • #2
    Suchen in einem Highlighter ? Was ist mir da jetzt entgangen ?
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Es tut mir leid, wenn ich mich etwas unklar ausgedrückt habe. Hier ein Beispiel was ich meine:

      Text, welcher aus der Datenbank geladen wird:
      Code:
      <p>Hallo Welt</p>
      <img src="bild.jpg" width="1024px">
      Wenn man nun die oben genannte Funktion mit dem zu hervorhebenden Zeichen "i" den Text bearbeiten lässt bekomme ich folgendes Ergebnis:
      Code:
      <p>Hallo Welt</p>
      <<span style="color: #ff0000;">i</span>mg src="bild.jpg" width="1024px">
      Wie man erkennen kann versucht das Script in den <img> Tag den text durch <span> hervorzuheben, was mir hier das Bild 1. nicht anzeigen würde und 2.Würde der Browser die Spitzen klammern des <img> Tags anzeigen.

      Dieses Problem tritt natürlich auch bei anderen tags auf.

      Meine Frage: wie kann ich dass verhindern?

      Kommentar


      • #4
        Bspw. durch DocumentFragment parsing ( DOMDocument ). Oder durch entsprechendem Regex.

        Was genau hat HTML in deiner Datenbank verloren ?
        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

        Kommentar


        • #5
          Durch das hinzufügen von (?!([^<]+)?>) in dein $strPattern, wird Text in spitzen Klammern ignoriert.

          PHP-Code:
          <?php
            
          function highlightPhrase $strHaystack$strNeedle,     
                                       
          $strColor ''$bCase FALSE )  
            {  
              if ( empty ( 
          $strColor ) )  
              {  
                
          // Standardfarbe: Rot  
                
          $strColor 'ff0000';  
              }  

              
          $strModifier '';  
              if ( 
          $bCase )  
              {  
                
          // Modifikator "i": Groß- und Kleinschreibung ignorieren.  
                
          $strModifier 'i';  
              }  

              
          $strQuotedNeedle preg_quote $strNeedle'/' );  

              
          // Hier wurde die Ausnahme hinzugefügt
              
          $strPattern '/' $strQuotedNeedle '(?!([^<]+)?>)/' $strModifier;  
              
          $strReplacement '<span style="color: #' $strColor ';">$0</span>';  

              return 
          preg_replace $strPattern$strReplacement$strHaystack );  
            }  
            
            echo 
          highlightPhrase("<img alt='Bild' /><p>Hallo</p>""L");

          ?>

          Kommentar


          • #6
            Danke, jetzt funktioniert es

            Kommentar

            Lädt...
            X