boeschung: HTML formatierten Text kürzen

Hallo Zusammen,

ich grüble jetzt schon seit etlicher Zeit über folgendes Problem:

In einem CMS können Beiträge mittels fckeditor erfasst werden. Die Beiträge haben einen Teaser in Kurzform (max. 150 Zeichen), der aus einem Einleitungstext (beliebig lang) generiert werden soll. Der Teaser ist somit als Kurzform auf der Startseite, der Rest (also auch den kompletten Einleitungstext) kann man dann über einen readmore-link aufrufen. Konkret liegt das Problem darin, dass ich den Einleitungstext kürzen will, dieser aber mit HTML-Tags versehen ist.

Mein logischer Ansatz:
Tags strippen, ermitteln, wo der Text abgeschnitten werden soll (nicht mitten im Wort, nicht hinter einem Komma etc.) und an dieser Stelle quasi z.B. 10 Zeichen nach rechts und links "schauen". Das Ende des Textes nach der gleichen Methode herausfinden und dann den Einleitungstext entsprechend mit PHP-Stringfunktionen "bearbeiten". Probleme dabei sind: wenn die ermittelten Zeichenfolgen tatsächlich mehrmals vorkommen sollten und wenn ich beim links/rechts schauen auf irgendwelche Tags "treffe".

Eigentlich finde ich den Ansatz ziemlich schlecht, aber irgendwie fällt mir dazu einfach im Moment nicht mehr ein.

Wie könnte man sowas noch mit PHP lösen? Oder gibts dafür schon eine Lösung?
Am einfachsten wäre es ja, wenn ich den Plain-Text aus dem fckeditor abgreifen könnte, oder?

Viele Grüße
boeschung

  1. Meine Meinung:

    Teaser als gekürzte Einleitung sind übel, wenn die Einleitung schon unglücklich ist. Eine Einleitung ist selten eine Zusammenfassung und deshalb als Grundlage für einen Teaser ungeeignet. Entweder wird der Teaser lächerlich oder die Einleitung wird es, weil sie auf den Teaser optimiert wurde.
    Sehe besser die Möglichkeit eines Abstracts vor, welche die Essenz des Artikels in vier, fünf Sätzen zusammenfassen darf, ohne dass du noch was beschneiden musst. Abstracts sind in der Regel länger ( Faustregel 10% des Artikel Haupttextes). Eventuell brauchst du aber einfach eine Description, die noch kürzer als das Abstract sein darf.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    1. @@Beat:

      Teaser als gekürzte Einleitung sind übel, wenn die Einleitung schon unglücklich ist. Eine Einleitung ist selten eine Zusammenfassung und deshalb als Grundlage für einen Teaser ungeeignet. Entweder wird der Teaser lächerlich oder die Einleitung wird es, weil sie auf den Teaser optimiert wurde.

      Ja. Das hatten wir auch auf dem World Usability Day in Berlin 2008 im Workshop „Sprache 2.0 – Sprechen Sie noch oder werden Sie schon verstanden?“. In den Folien besonders Seiten 21 bis 24.

      Live long and prosper,
      Gunnar

      --
      Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
    2. Meine Meinung:

      Teaser als gekürzte Einleitung sind übel, wenn die Einleitung schon unglücklich ist. Eine Einleitung ist selten eine Zusammenfassung und deshalb als Grundlage für einen Teaser ungeeignet. Entweder wird der Teaser lächerlich oder die Einleitung wird es, weil sie auf den Teaser optimiert wurde.
      Sehe besser die Möglichkeit eines Abstracts vor, welche die Essenz des Artikels in vier, fünf Sätzen zusammenfassen darf, ohne dass du noch was beschneiden musst. Abstracts sind in der Regel länger ( Faustregel 10% des Artikel Haupttextes). Eventuell brauchst du aber einfach eine Description, die noch kürzer als das Abstract sein darf.

      mfg Beat

      Hallo Beat,

      guter Vorschlag, allerdings werden die Beiträge von einem Behinderten geschrieben (hat nur einen Finger zur Verfügung). Von daher wäre es am Besten, er könnte einfach eine Einleitung schreiben und daraus wird eine Art Teaser "gezimmert". D.h., umso weniger Textboxen und Extragedanken für einen Aufhänger er sich machen muß, desto besser. Aber Du hast schon recht, das Wahre ist es so wirklich nicht, zumal er ja auch mehr Traffic generieren will, was bei Pseudo-Aufreißern nicht unbedingt förderlich ist.

      Gruß
      boeschung

      1. guter Vorschlag, allerdings werden die Beiträge von einem Behinderten geschrieben (hat nur einen Finger zur Verfügung).

        In dem Falle braucht er eine geeignete Unterstützung, denn das Ziel behindertengerechter Unterstützung kann nicht sein, ihnen die Erschöpfung durch geeignete Ausdruckskürze zu ersparen. Vielmehr sollte Ihnen der Ausdruck erleichtert werden.

        Was gibt es für Möglichkeiten? Texterstellung via Sprache?

        Von daher wäre es am Besten, er könnte einfach eine Einleitung schreiben und daraus wird eine Art Teaser "gezimmert". D.h., umso weniger Textboxen und Extragedanken für einen Aufhänger er sich machen muß, desto besser.

        Falscher Ansatz, denn du nötigst ihm ein künstliches Design seines Inhalts auf.

        Aber Du hast schon recht, das Wahre ist es so wirklich nicht, zumal er ja auch mehr Traffic generieren will, was bei Pseudo-Aufreißern nicht unbedingt förderlich ist.

        Du sagst es.
        Ihr solltet gemeinsam euch erkundigen, ob es bessere Eingabemedien gibt.

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        1. guter Vorschlag, allerdings werden die Beiträge von einem Behinderten geschrieben (hat nur einen Finger zur Verfügung).

          In dem Falle braucht er eine geeignete Unterstützung, denn das Ziel behindertengerechter Unterstützung kann nicht sein, ihnen die Erschöpfung durch geeignete Ausdruckskürze zu ersparen. Vielmehr sollte Ihnen der Ausdruck erleichtert werden.

          Was gibt es für Möglichkeiten? Texterstellung via Sprache?

          Von daher wäre es am Besten, er könnte einfach eine Einleitung schreiben und daraus wird eine Art Teaser "gezimmert". D.h., umso weniger Textboxen und Extragedanken für einen Aufhänger er sich machen muß, desto besser.

          Falscher Ansatz, denn du nötigst ihm ein künstliches Design seines Inhalts auf.

          Aber Du hast schon recht, das Wahre ist es so wirklich nicht, zumal er ja auch mehr Traffic generieren will, was bei Pseudo-Aufreißern nicht unbedingt förderlich ist.

          Du sagst es.
          Ihr solltet gemeinsam euch erkundigen, ob es bessere Eingabemedien gibt.

          mfg Beat

          Hallo Beat,

          nicht zu schnell mit den jungen Pferden. Ohne die genauen Umstände zu kennen, ist es sehr dreist zu behaupten, ich würde ihm das falsche Werkzeug an die Hand geben.

          Ich verstehe Dein Anliegen und weiß worauf Du hinaus willst. Kurz zur Geschichte: Einsatz von Typo3 als CMS mit einer angepaßten Lösung (umgesetzt von irgendeiner Agentur, die ich nicht kenne). Das war teuer und ist vorallem schlecht erweiterbar. Da kein Geld da ist, geschieht ab sofort alles für Lau. Von seinem Hardware-Menschen wurde ihm dann der Umstieg auf Joomla empfohlen, weil es das umsonst gibt und man in der Tat tolle Sachen damit machen kann ;)
          Dann kam ich ins Spiel, hab' Joomla eingerichtet und diverse Anpassungen vorgenommen (auf Anweisung des Hardware-Menschen, nicht des eigentlichen Auftraggebers). So weit, so gut. Dann habe ich mir mal die Sache vor Ort angeschaut und hab' das ganze Elend gesehen. Daraufhin habe ich mich entschlossen, ein einfaches Interface, was dem Typo3 Interface ähnelt, zu bauen, was Joomla-gerechte Datensätze erzeugt. Das alles erstmal für Lau. Mein Einfluss in dieser Delegationskette ist gering, denn ich bin nur ein Freiberufler, der das a) für umsonst macht und b) die eigentliche Vertrauensperson der Hardware-Mensch ist und nicht ich.
          Tja, und jetzt bin ich eben auf das genannte Problem gestoßen, wobei mir keiner helfen will ;)

          Deine Vorgehensweise ist löblich (vorallem wenn wenigestens etwas Kohle da wäre), aber in diesem Fall absolut unangebracht (was Du ja nicht wissen konntest) und auch nicht Gegenstand dieses Threads.

          Also, zurück zum Thema :)

          Gruß
          boeschung

          1. Deine Vorgehensweise ist löblich (vorallem wenn wenigestens etwas Kohle da wäre), aber in diesem Fall absolut unangebracht (was Du ja nicht wissen konntest) und auch nicht Gegenstand dieses Threads.
            Also, zurück zum Thema :)

            Das war keine Kritik an deinem Anliegen.
            Aber du könntest die Situation insofern auf eine andere Grundlage stellen, als dass du dem Anwender die Möglichkeit alternativer Eingabegeräte ins Bewusstsein rückst. Wie es so heisst, der Appetit kommt mit dem Essen.

            Ich kenne mich in dem Gebiet nicht aus, und kann aus der Ferne auch nicht sagen, was das geeignete Eingabemittel wäre. Ich denke aber, dass Spracherkennung und Input-Steuerung heute auch nicht mehr das Geld kostet, vor allem dann nicht, wenn Sie nicht von einem Arzt verschrieben wird.

            http://www.zdnet.de/enterprise/os/vista/tests-beratung/0,39035744,39153734-4,00.htm

            ;))

            mfg Beat

            --
            ><o(((°>           ><o(((°>
               <°)))o><                     ><o(((°>o
            1. Deine Vorgehensweise ist löblich (vorallem wenn wenigestens etwas Kohle da wäre), aber in diesem Fall absolut unangebracht (was Du ja nicht wissen konntest) und auch nicht Gegenstand dieses Threads.
              Also, zurück zum Thema :)

              Das war keine Kritik an deinem Anliegen.
              Aber du könntest die Situation insofern auf eine andere Grundlage stellen, als dass du dem Anwender die Möglichkeit alternativer Eingabegeräte ins Bewusstsein rückst. Wie es so heisst, der Appetit kommt mit dem Essen.

              Ich kenne mich in dem Gebiet nicht aus, und kann aus der Ferne auch nicht sagen, was das geeignete Eingabemittel wäre. Ich denke aber, dass Spracherkennung und Input-Steuerung heute auch nicht mehr das Geld kostet, vor allem dann nicht, wenn Sie nicht von einem Arzt verschrieben wird.

              http://www.zdnet.de/enterprise/os/vista/tests-beratung/0,39035744,39153734-4,00.htm

              ;))

              mfg Beat

              Hallo Beat,

              vielen Dank für den Link. Sprachsteuerung kommt nicht in Frage, da seine Aussprache aufgrund einseitiger Gesichtslähmung selbst für einen Ex-Zivi wie mich, äußerst schwer verständlich ist.

              Daher bin ich, ebenso wie sein Hardware-Mensch, davon überzeugt, dass Tippen das Richtige für ihn ist. Und da der Auftraggeber nach wie vor einen messerscharfen Verstand hat, gehe ich mal davon aus, dass er sich längst mit den Interaktionsmöglichkeiten zwischen Mensch und Maschine auseinandergesetzt hat. Meine Aufgabe ist es jedenfalls nicht, denn die hieß schlicht und einfach: Joomla einrichten, Beiträge aus Typo-Datenbank übernehmen. Basta! Und jetzt komme ich daher, mit meinem großen Herzen und will ihm trotzdem was Gutes tun und scheitere kläglich ;)

              Gruß
              boeschung

  2. @@boeschung:

    Am einfachsten wäre es ja, wenn ich den Plain-Text aus dem fckeditor abgreifen könnte, oder?

    strip_tags()?

    Und was Beat sagte.

    Live long and prosper,
    Gunnar

    --
    Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
    1. @@boeschung:

      Am einfachsten wäre es ja, wenn ich den Plain-Text aus dem fckeditor abgreifen könnte, oder?

      strip_tags()?

      Und was Beat sagte.

      Live long and prosper,
      Gunnar

      Hallo Gunnar,

      oh, da hab' ich ja was angerichtet ;) Den Satz habe ich quasi gedankenlos hingeschrieben, denn den Plain-Text zu strippen wäre nicht das Problem. Ich dachte eher daran, dass ich mir den Text, ähnlich wie in einem Editor, ohne die ganzen Tags abgreife und diesen dann verwende ...

      ... und das ist natürlich absoluter Mummpitz von mir. Ignoriere/Vergiss einfach den letzten Satz von mir :)

      Gruß
      boeschung

  3. echo $begrüßung;

    Eigentlich finde ich den Ansatz ziemlich schlecht, [...]

    Ich eigentlich auch :-) Was machst du, wenn der End-Tag weit außerhalb des Teaserbereichs liegt? Willst du die HTML-Elemente auch noch logisch auswerten und schließende Tags hinzufügen?
    Brauchst du den HTML-Code im Teaser?

    Am einfachsten wäre es ja, wenn ich den Plain-Text aus dem fckeditor abgreifen könnte, oder?

    Das hört sich so an, als ob du das HTML-Zeugs gar nicht im Teaser brauchst. In dem Fall reicht doch ein strip_tags() und anschließend deine Abschneideprozedur. (Beachte, das striptags() bei ungünstiger <>-Konstellation mehr wegschneidet als notwendig ist.)

    echo "$verabschiedung $name";

    1. echo $begrüßung;

      Eigentlich finde ich den Ansatz ziemlich schlecht, [...]

      Ich eigentlich auch :-) Was machst du, wenn der End-Tag weit außerhalb des Teaserbereichs liegt? Willst du die HTML-Elemente auch noch logisch auswerten und schließende Tags hinzufügen?
      Brauchst du den HTML-Code im Teaser?

      Am einfachsten wäre es ja, wenn ich den Plain-Text aus dem fckeditor abgreifen könnte, oder?

      Das hört sich so an, als ob du das HTML-Zeugs gar nicht im Teaser brauchst. In dem Fall reicht doch ein strip_tags() und anschließend deine Abschneideprozedur. (Beachte, das striptags() bei ungünstiger <>-Konstellation mehr wegschneidet als notwendig ist.)

      echo "$verabschiedung $name";

      Hallole,

      hmm, dann sind wir bzgl. meines Ansatzes einer Meinung :)

      Das HTML-Zeugs brauch ich im Teaser, denn der Beitragerfasser möchte diese Optionen haben.

      Ich werd' nochmals in mich gehen. Vielleicht meldet sich ja noch eine(r), die/der schonmal ein ähnliches oder vielleicht sogar gleiches Problem hatte.

      Gruß
      boeschung

  4. Yerf!

    Wie könnte man sowas noch mit PHP lösen? Oder gibts dafür schon eine Lösung?

    Ob man was fertiges nehmen kann weis ich nicht. Aber wenn man korrektes XHTML voraussetzen kann, sollte es eigenlich nicht zu aufwändig sein einen eigenen Parser zu schreiben, der den Text zeichenweise analysiert und die reinen Textzeichen zählt. Dabei kann man sich auch die Struktur (also die noch offenen Tags) auf einem Stack speichern und am ende dann korrekt schließen.

    Gruß,

    Harlequin

    --
    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
    1. Hi,

      Aber wenn man korrektes XHTML voraussetzen kann, sollte es eigenlich nicht zu aufwändig sein einen eigenen Parser zu schreiben, der den Text zeichenweise analysiert und die reinen Textzeichen zählt. Dabei kann man sich auch die Struktur (also die noch offenen Tags) auf einem Stack speichern und am ende dann korrekt schließen.

      Dann kann man auch gleich einen fertigen Parser nehmen, und sich damit einen DOM-Baum erstellen lassen.

      Den durchlaeuft man dann rekursiv, und addiert dabei die Laenge der Inhalte auftretender Textknoten. Anschliessend kann man dann ab der Stelle, wo man die Maximallaenge erreicht hat, wieder "hoch" klettern, und dabei den "Rest", nachfolgende Knoten auf der jeweiligen Ebene, verwerfen.

      MfG ChrisB

      --
      „This is the author's opinion, not necessarily that of Starbucks.“
      1. Yerf!

        Dann kann man auch gleich einen fertigen Parser nehmen, und sich damit einen DOM-Baum erstellen lassen.

        So gesehen ja. Vorhin standen nur noch zu viele (DOM-)Bäume im (Web-)Wald...

        Gruß,

        Harlequin

        --
        <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->