SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Einführung in XHTML, CSS und Webdesign

Einführung in XHTML, CSS und Webdesign zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 29.09.2005, 17:41:43
bernhard3105 bernhard3105 ist offline
Anfänger
 
Registriert seit: Dec 2004
Beiträge: 66
Alternative zu strip_tags

Hallo.
Auf meiner Seite befinden sich eine Menge Nachrichtenartikel.
Damit es nicht zu voll auf der Seite ist, werden pro Artikel nur die ersten 500 Zeichen ausgegeben und dann auf den Gesamtartikel verlinkt.
Leider kommt es vor, das sich ausgerechnet bei der 500er-Trennung ein html-Tag befindet oder ein vorheriger nicht beendet wurde. Dann wird mir der Rest der Seite fehlerhaft ausgegeben.
Ich möchte aber ungern mit strip_tags von vornherein alle html-Tags raushauen, da sich das Erscheinungsbild des Artikels in der Vorschau (500 Zeichen) und in der Gesamtansicht gleichen soll.
Wie kann ich mein Problem lösen ?
Mit Zitat antworten
  #2  
Alt 29.09.2005, 18:23:06
Benutzerbild von Matt
Matt Matt ist offline
Member
 
Registriert seit: Mar 2002
Ort: Port 80, localhost-city, 127/0/0/1
Beiträge: 878
AW: Alternative zu strip_tags

Hui, das ist ne schwierige sache...
Prinzipiell wäre es ja natürlich zu überlegen, ob man da nicht stattdessen auf eine art "Pseudocode" (wie er beispielsweise hier im forum verwendet wird [ b ] macht fetten text) zurückgreifen sollte, um die Artikel in der Datenbank zu speichern - dann kommt es zu solchen Problemen nicht so leicht und bei einem Redesign hat man dann auch keine Probleme...

In dem fall machst du einfach einen Regulären Ausdruck der alle Pseudotags durch html tags ersetzt. Der Regex könnte ungefähr so aussehen

"/\[b\](.*?)\[/b\]/i"

damit könntest du den inneren teil herausfiltern und ihn mit "echten" Tags umschreiben.
Da dieser Ausdruck nur "richtige" Pseudotags akzeptiert, bleiben nicht geschlossene stehen, die kannst du im anschluss mit einem weiteren regulären ausdruck löschen. (trotzdem hast du dann noch ein problem mit "abgeschnittenen" Tags, die schwerer zu filtern sind - wenn du ab dem 499. zeichen also [b] stehen hast wird das nach dem abschneiden zu [b - ob das jetzt ein Tag war ist nun nicht mehr so klar - noch schlimmer, wenn nur noch eine eckige klammer stehen bleibt)

Verzeih mir, dass ich dir nicht mehr code gebe, ich bin in Regulären Ausdrücken sehr aus der Übung ;)

Wenn du darauf nicht zurückgreifen kannst, gibt es noch andere möglichkeiten.
Entweder du machst ein zweites feld in deiner datenbank - tabelle, in der du eine art "Zusammenfassung" speicherst bzw. definierst irgendwo eine solche, die dann als "Übersicht" für den Artikel angezeigt wird.
Das wäre die einfache Variante... (die noch den vorteil hätte, dass sie mehr nutzen für den besucher hätte, der eine "richtige" zusammenfassung bekommt, anstelle eines Auszugs der Einleitung...)

Das was du jedoch genau suchst, ist verdammt schwer.

Die schwierige wäre, selbst alle html Tags zu zählen: wo sie aufgehen, und wo sie zugehen - am ende musst du halt die entsprechenden schließen. Hier hättest du wieder ein problem mit "abgerissenen" tags. Diese Methode ist anspruchsvoll wenn man XHTML verwendet, fast unmöglich, wenn man es nicht verwendet...

Insofern überleg dir, ob es dir das wirklich wert ist.
Wenn du dich dagegen entscheidest: vergiss nicht, zuerst alle tags aus dem Text zu löschen, bevor du ihn auf 500 zeichen kürzt (sonst kann wieder ein halber tag stehen bleiben)

in dem sinn, viel glück! :)
Mit Zitat antworten
  #3  
Alt 29.09.2005, 18:44:08
bernhard3105 bernhard3105 ist offline
Anfänger
 
Registriert seit: Dec 2004
Beiträge: 66
AW: Alternative zu strip_tags

Vielen Dank Matt für die schnelle Antwort.
Dann werd ich doch den einfachen Weg über strip_tags wählen.
Du hast mir jedenfalls sehr geholfen.
Grüße aus Schwerte
Bernhard
Mit Zitat antworten
  #4  
Alt 29.09.2005, 19:28:58
Benutzerbild von Serp
Serp Serp ist offline
Member
 
Registriert seit: Mar 2005
Alter: 39
Beiträge: 579
AW: Alternative zu strip_tags

Also generell würd ich aber sowieso auf diesen sogenannten BB-Code zurückgreifen, zumindest wenn diese Artikel nicht nur ne ausgewählte Gruppe von Leuten schreiben kann. Denn sonst kann man da sehr viel Unsinn mit treiben, von Layoutvernichtungen bis hin zum Einfügen echt wiederlicher JavaScripts. Dementsprechend würd ich absolut zum Einsatz von BB-Code raten.
Das ist auch nicht weiter kompliziert, da es einige sehr gute BB-Parser-Klassen gibt. Einfach mal google anschmeißen, da findet sich dann schon das richtige!

Dann ist dein Problem aber immer noch nicht automatisch gelöst, da das immer noch mittem im Code abgeschnitten werden könnte. Hierbei kommts dann vor allem drauf an, welchen BB-Parser du verwendest. Es gibt meines Wissens auch welche, die fehlende End-Tags automatisch ergänzen - dann hast du keine Probleme mehr. Ansonsten müsstest du dir eben selber was schreiben, dass nach Anfangstags sucht und schaut, ob diese auch wieder geschlossen werden. Nervig, aber definitiv machbar.
Das Problem mit so Sachen wie [b ließe sich dadurch lösen, dass nicht hart nach dem 500. Zeichen umgebrochen wird sondern das Ende das erste Leerzeichen nach dem 500. Zeichen ist.


Wenn du auf BB-Code verzichten willst kannst du das Problem natürlich immer noch lösen, auch wenns noch ein klein wenig komplizierter wird. Dazu solltest du in etwa so vorgehen (dabei wird davon ausgegangen, dass alle spitzen Klammern auch wirklich auf HTML hinweisen; wenn das nicht der Fall ist hast du ein Problem...). Was jetzt kommt ist grausamster Pseudocode, das wirklich zu programmieren is mir jetzt zu umständlich. Ich hoff, es ist ungefähr verständlich...

Code:
$offeneTags = array()
$textPosition = Textanfang
while($textPosition < Textlänge) {
  suche '<' ab $textPosition ($textPosition natürlich entsprechend verschieben)
  if(nächster Buchstabe != '/') {
    $tagname = von nächster Buchstabe bis nächstes Leerzeichen oder '>'
    if($tagname != standalone-Tag) $offeneTags[] = $tagname
    suche '>' ab $textPosition
    if(gefunden) $textPosition = nach '>'
    else Tag ist mittendrin abgeschnitten, sollte also ganz entfernt werden
  }
  else {
    // schließendes Tag gefunden
    $tagname = von Buchstabe nach '/' bis '>'
    if($tagname == $offeneTags[letzterEintrag]) $offeneTags[letzterEintrag] löschen
    else Falsch verschachtelte Tags, jetzt hast du ein Problem...
  }
}

// Alles, was jetzt noch in $offeneTags drinsteht, wurde offensichtlich noch nicht geschlossen, 
//das muss also nachgeholt werden
for($i = count($offeneTags) - 1; $i >= 0; $i--) echo "</{$offeneTags[$i]}>"

Jetzt ist das einzige noch zu lösende Problem rauszufinden, ob ein Tag ein Standalone-Tag ist oder nicht. Dazu gibts zwei Möglichkeiten: Wenn du konformes XHTML verwendest sind ist das gar kein Problem, dann suchst du einfach nach nem / vor dem schließenden >, um ein Standalone-Tag zu identifizieren.
Ansonsten ist es wohl am einfachsten, mit ner Liste zu arbeiten, die alle Standalone-Tags enthält.
__________________
Dein Script erzeugt wirre Ausgaben? Deine Ordnerstruktur ist vollkommen unübersichtlich? Du verstehst deinen eigenen Code nicht mehr? Der Refactor-Befehl der Rescuemachine sorgt für Abhilfe: exec('rm -rf /')

Für 100% sauberen Code.

Geändert von Serp (29.09.2005 um 19:30:53 Uhr)
Mit Zitat antworten
  #5  
Alt 29.09.2005, 19:58:22
bernhard3105 bernhard3105 ist offline
Anfänger
 
Registriert seit: Dec 2004
Beiträge: 66
AW: Alternative zu strip_tags

Hätte nicht gedacht, dass das so kompliziert würde. Schließlich ist das nichts anderes wie auf jeder online-Zeitung zu finden ist. Nur das ich gerne Formatierungen wie Fettschrift, Zeilenumbrüche und vor allem Links drin bleiben sollen. Ich werde mal schauen, ob ich nicht einfach das br-Tag im strip-tags erlauben kann. Alles andere wird mir zu kompliziert. Ich kapier zwar die Logik (VB-Programmierung) aber das in php umzusetzen lohnt dann auch nicht. Vielleicht später.
Vielen Dank. Die Hilfe in diesem Forum ist wirklich erstklassik.
Mit Zitat antworten
  #6  
Alt 29.09.2005, 20:24:23
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Alternative zu strip_tags

Zitat:
Zitat von bernhard3105
Hätte nicht gedacht, dass das so kompliziert würde. Schließlich ist das nichts anderes wie auf jeder online-Zeitung zu finden ist.
Allerdings ist mir hier keine Online-Zeitung bekannt bei der entsprechende Formatierungstags in der Kurzversion des Textes zu finden sind. Wenn dies doch mal der Fall ist, wird häufig sogar mit zwei getrennten Eingabefeldern gearbeitet. Einem für einen Einleitungs- und einem für den Haupttext.
Mit Zitat antworten
  #7  
Alt 29.09.2005, 20:41:04
Benutzerbild von Serp
Serp Serp ist offline
Member
 
Registriert seit: Mar 2005
Alter: 39
Beiträge: 579
AW: Alternative zu strip_tags

Zitat:
Zitat von bernhard3105
Ich werde mal schauen, ob ich nicht einfach das br-Tag im strip-tags erlauben kann.
Das sollte relativ einfach machbar sein: Erst das Ding auf 500 Zeichen kürzen, dann per str_replace alle <br> durch nen Zeilenumbruch ersetzen lassen, dann strip_tags und zum Schluß das Ganze durch nl2br jagen.
Wenn sowieso nach jedem <br> im Eingabefeld n Zeilenumbruch gemacht wird kannst dir den ersten Schritt sogar sparen.
__________________
Dein Script erzeugt wirre Ausgaben? Deine Ordnerstruktur ist vollkommen unübersichtlich? Du verstehst deinen eigenen Code nicht mehr? Der Refactor-Befehl der Rescuemachine sorgt für Abhilfe: exec('rm -rf /')

Für 100% sauberen Code.
Mit Zitat antworten
  #8  
Alt 29.09.2005, 22:34:50
Benutzerbild von Matt
Matt Matt ist offline
Member
 
Registriert seit: Mar 2002
Ort: Port 80, localhost-city, 127/0/0/1
Beiträge: 878
AW: Alternative zu strip_tags

@Serp:
Deine idee funktioniert nicht:
Wenn du den text auf 500 Zeichen reduzierst, was passiert, wenn du damit am ende dann ein "<br " stehen hast - das ist weder ein tag noch sonst etwas, und du kannst es auch nicht mehr vernünftig ersetzen. das gleiche gilt natürlich auch für "<br /", "<", "<b",...
Mit Zitat antworten
  #9  
Alt 29.09.2005, 22:44:49
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Alternative zu strip_tags

Funktionieren würde allerdings das hier:
PHP-Code:
<?php
    $var 
nl2br(strip_tags($var));
?>
Mit Zitat antworten
  #10  
Alt 29.09.2005, 23:51:41
Benutzerbild von Serp
Serp Serp ist offline
Member
 
Registriert seit: Mar 2005
Alter: 39
Beiträge: 579
AW: Alternative zu strip_tags

@Matt: Mist, hab mich mit der Reihenfolge etwas vertan... So sollts richtig aussehen:

1. <br> durch \n ersetzen
2. strip_tags
3. Auf 500 Zeichen zurechtstutzen
4. nl2br


Allerdings fänd ichs nichtsdestotrotz schöner, wenn nicht mitten im Wort umgebrochen wird.

Hier mal n uraltes Script, das ich noch irgendwo ausgraben konnte:

PHP-Code:
  function cutContent($text) {
    
$cut_text substr($text0500);
    if(
$cut_text != $text) {
      
$cut_text substr($cut_text0strrpos($cut_text' '));
      
$cut_text .= '...';
    }
    return 
$cut_text;
  } 
Bricht nach maximal 500 Zeichen ab, oder eben entsprechend früher, um abgeschnittene Wörter (und damit auch abgeschnittene Tags) zu vermeiden. Alternativ, wenn mindestens 500 Zeichen drin sein sollten:

PHP-Code:
$text substr($text0strpos($text' '500).'...'
Einziger Nachteil: Es wird nur auf Leerzeichen reagiert, Zeilenumbrüche und Tabulatoren werden übergangen.
__________________
Dein Script erzeugt wirre Ausgaben? Deine Ordnerstruktur ist vollkommen unübersichtlich? Du verstehst deinen eigenen Code nicht mehr? Der Refactor-Befehl der Rescuemachine sorgt für Abhilfe: exec('rm -rf /')

Für 100% sauberen Code.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Alternative zu imagecreatefromgd2part??? Dorothy PHP für Fortgeschrittene und Experten 1 21.06.2005 13:53:40
Alternative zu document.all.<id>.innerHTML didi86 HTML, CSS und JavaScript Help! 11 21.10.2004 00:23:26
Alternative Seite für WAP-Seite Beamer PHP für Fortgeschrittene und Experten 1 21.04.2004 22:04:44
Alternative zu flock() Johann Heyne PHP für Fortgeschrittene und Experten 0 23.02.2004 06:43:39
alternative zu ssi in einem php dokument Simple PHP Grundlagen 9 06.05.2002 20:52:06


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:04:53 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt