Ersten Wörter fetten bis zum -(Minus)

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

  • Ersten Wörter fetten bis zum -(Minus)

    Nach langer Zeit mal wieder eine Frage von mir.

    Hallo...

    ich komme bei der Sache hier nicht weiter.

    Ich habe einen Teaser (der natürlich nicht immer mit Köln (ots) beginnt)
    Code:
    Köln (ots) - Ein bislang Unbekannter hat am gestrigen Sonntagmittag....blablabla...
    Mit folgemdem Code lasse ich nun bis zum ersten ") -" den Text fetten.
    Das funktioniert auch... meistens. Kommt aber mal in einem Text der Suchstring nicht vor dann wird das <strong> geöffnet aber natürlich nicht mehr geschlossen.

    PHP-Code:
    $teasertext "<strong>".preg_replace("#\) \-#",") -</strong>",$teasertext,1); 
    Ich könnte vorher abfragen ob in den ersten ca. 30 Zeichen ein ") -" vorkommt. Währe schon mal ne Verbesserung. Nur kann ich es aus Performancegründen nicht etwas besser mit preg_match lösen?

    Ich freue mich über eure Lösungsansätze -> Danke.

    Cu SusiSorglos
    PHP 8.0, MariaDB 10.5 auf U20.04

  • #2
    strpos und substr

    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      PHP-Code:
      $parts explode('-'$text);
      $parts[0] = '<strong>' $parts[0] . '</strong>';
      $text implode('-'$parts); 

      Kommentar


      • #4
        Zitat von SusiSorglos Beitrag anzeigen
        Nach langer Zeit mal wieder eine Frage von mir.
        Wieso muss ich immer an bunte Schraubenzieher (und einen sprechenden Fön) denken?

        Ich habe einen Teaser ...
        Code:
        Köln (ots) - Ein bislang Unbekannter hat am gestrigen Sonntagmittag....blablabla...
        Mit folgemdem Code lasse ich nun bis zum ersten ") -" den Text fetten.
        Das funktioniert auch... meistens. Kommt aber mal in einem Text der Suchstring nicht vor dann wird das <strong> geöffnet aber natürlich nicht mehr geschlossen.

        PHP-Code:
        $teasertext "<strong>".preg_replace("#\) \-#",") -</strong>",$teasertext,1); 
        Da du immer (bedingungslos) den Teilstring "<strong>" einbaust, wird der auch immer in $teasertext erscheinen. Baue den Teil mit in die preg_replace-Geschichte ein, dann erscheint das öffnende STRONG-Tag auch nur, wenn das Muster passt:

        PHP-Code:
        preg_replace('/\A.+?\)\s+-/s''<strong>$0</strong>'$teasertext); 
        * Das \A erfüllt hier den gleichen Zweck wie deine Begrenzung der Ersetzungen auf 1.
        * Das ? in .+? sorgt dafür, dass die erste schließende Klammer die Suche beendet.

        Ich könnte vorher abfragen ob in den ersten ca. 30 Zeichen ein ") -" vorkommt. Währe schon mal ne Verbesserung. Nur kann ich es aus Performancegründen nicht etwas besser mit preg_match lösen?
        Solange das Konstrukt nicht korrekt funktioniert, stehen "Performancegründe" hintenan. Und ich sehe auch nicht, wie eine preg_match()-Lösung hier schneller sein sollte. Preg_replace() sucht und ersetzt in einem Aufwasch, mit preg_match() müsstest du anschließend das Ersetzen noch in PHP (substr() und ".") nachbauen.

        Ergänzend:

        Sicherst du den ausgegebenen Text gegen "HTML-Injections"? Besser wäre das.

        Der Gedankenstrich wird (typografisch korrekt) durch den Halbgeviert-Strich (Unicode: \u2013, PCRE: \x{2013}, HTML-NCR: &#38;#8211;[0]) dargestellt, nicht durch das ASCII-Minus (\x2d, &#38;#45;, ...).

        PHP-Code:
        preg_replace_callback(
            
        '/\A(.+?\)\s+)-/s'
            function (
        $h) {
                return 
        sprintf('<strong>%s&#8211;</strong>'htmlspecialchars($h[1]));
            },
            
        $teasertext
        ); 
        Vernünftiger wäre natürlich direkt der entsprechende UTF-8-Codepoint, aber das könnte man nicht so gut erkennen, wegen der Darstellung hier im Forum.

        --
        [0] Ich glaube, charmap.exe lügt da.
        Zuletzt geändert von fireweasel; 24.01.2014, 11:38. Grund: Das Escaping von Forums-Beiträgen ist kaputt
        Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

        Kommentar

        Lädt...
        X