PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : String (mit HTML Befehlen) beschneiden



Server
09-07-2006, 14:23
Hallo,

ich habe ein Probelm beim Beschneiden von Strings, welche HTML Befehle beinhalten... Das Beschneiden an sich ist kein Problem. Nur, wenn HTML Befehle zerschnitten werden...
$rueckgabe = substr($string, 0, ($strMaxLaenge + $i++));Bisher habe ich das so gelöst
while (substr_count($rueckgabe, "<") > substr_count($rueckgabe, ">")) {
$rueckgabe .= ">";
Also einfach verglichen wieviele < und wieviele > vorhanden sind, und das ausgeglichen...

Nun ist aber das Problem bei folgendem
$string = "<span xyz='abc'>Lalalala</span>Wenn ich nun den String innerhalb des <span xyz='abc'> Befehls zerschneide kann ich mit dem String nichts mehr anfangen. Es bleibt ein offener <span> Befehl zurück...

Gibt es eine Möglichkeit, alle noch offenen HTML Befehle automatisch zu schließen? Oder hat jemand eine alternative Idee???

Besten Dank
- Server

Gaert
09-07-2006, 17:01
Hallo,

mich würde als allererstes mal interessieren warum du die Strings zerschneiden willst. Vielleicht kann ich dir dann eine Alternative nennen.

Gruß,

Gaert

Server
09-07-2006, 18:37
warum? Es handelt sich um einen Text, der mit HTML Formatierung in einer DB liegt.

Und wenn nun dieser Text angezeigt wird, sollen ersteinmal nur die ersten 1000 Zeichen (ohne HTML Befehle) dieses Textes ausgegeben werden. Erst auf einer Unterseite soll dann alles erscheinen...

Gibts da eine andere Möglichkeit???

Gruss
- Server

Romanday
09-07-2006, 23:54
warum? Es handelt sich um einen Text, der mit HTML Formatierung in einer DB liegt.

Und wenn nun dieser Text angezeigt wird, sollen ersteinmal nur die ersten 1000 Zeichen (ohne HTML Befehle) dieses Textes ausgegeben werden. Erst auf einer Unterseite soll dann alles erscheinen...

Gibts da eine andere Möglichkeit???

Gruss
- Server

Du kannst mit den preg Funktionen deine Strings zerteilen.

http://www.php.net/manual/de/ref.pcre.php

Würde dir aber raten dein Projekt komplett zu überarbeiten.

Server
10-07-2006, 06:20
Ui das sieht komplexer aus... Schau es mir die Tage mal an.
Danke auf jeden Fall!

Warum meinst du soll ich es komplett überarbeiten? Weil ich HTML direkt in der DB speicher? Wie soll ich das sonst machen, wenn ich einen String bekomme, in dem bereits HTML drin ist, und ich nicht will das die Formatierung kaputt geht?

Es ist nur ein wenig HTML zum layouten in diesem String...

Bin für Ratschläge immer Dankbar!!!

- Server

Pingu
10-07-2006, 07:34
warum? Es handelt sich um einen Text, der mit HTML Formatierung in einer DB liegt.
Und wenn nun dieser Text angezeigt wird, sollen ersteinmal nur die ersten 1000 Zeichen (ohne HTML Befehle) dieses Textes ausgegeben werden.
Warum entfernst Du dann nicht einfach zuerst den Markup und schneidest dann nach 1.000 Zeichen ab?
Ich habe es zum Beispiel so gemacht:
preg_match('#<title[^>]*>\s*(.*)\s*</title>.*<body[^>]*>\s*((<[^>]+>|\s+|[^<>\s]){0,600})(\s.*)?\s*</body>#i', $fc, $fcontent);

$fc beinhaltet hierbei eine gesammte HTML-Dateim, aus der ich nur den Inhalt (Body) anzeigen möchte und auch nur eine Vorschau. Das ganze wird dann auf 600 Zeichen begrenzt. In $fcontent[2] steht dann der gewünschte Inhalt und in $fcontent[1] die Titelangabe aus der HTML-Datei.

Pingu

Romanday
10-07-2006, 07:44
Warum meinst du soll ich es komplett überarbeiten? Weil ich HTML direkt in der DB speicher? Wie soll ich das sonst machen, wenn ich einen String bekomme, in dem bereits HTML drin ist, und ich nicht will das die Formatierung kaputt geht?


Text und Formatierung immer trennen!
Wie willst Du sonst, nach Daten suchen, Text z. B. später in XML
formatieren, als .xls exportieren, strings prüfen etc..
Also Probleme ohne Ende.
Außerdem bläßt dir die Formatierung unötigen Wind in die DB.

Ich weiß auch nicht wie Du auf so eine Idee gekommen bist?
In fast jedem Taschenbuch wird doch darauf hingewiesen, +
Beispiele wie man es machen könnte.

Turbohummel
10-07-2006, 07:49
Vielleicht ein vom User eingegebener HTML-Text?

Server
10-07-2006, 08:29
Hm Danke für Eure Meldungen... Ich verstehe es aber nicht. Ok, klar das man eigentlich kein HTML usw mit in die DB schieben soll...

Aber wenn ich aus meinem String (Der sieht zB so aus):
$string = "hier ist der text, den <b>ich euch</b> zeigen will";Alle Formatierungen lösche (also <b>, </b>) wie bekomme ich dann aus
$string = "hier ist der text, den ich euch zeigen will"; wieder meinen Originalstring?

Ich blick das irgendwie noch nicht...

Besten Dank aber das Ihr euch meiner annehmt...
- Server

Romanday
10-07-2006, 08:53
Vielleicht ein vom User eingegebener HTML-Text?

Kann sein, dann mal den Link posten.
(Wenn Fluffy Bunny 3x klingelt. :D)

Server
10-07-2006, 09:02
Ja der Text wird von Usern eingegeben. Es ist aber eine geschlossene Gruppe (interner Bereich) und ich nutze den WYSIWYG Editor von TinyMCE (http://tinymce.moxiecode.com/)
Dort werden auch eigentlich alle HTML-Tags bis auf ein paar wie halt <b> usw. unterbunden...

Romanday
10-07-2006, 09:42
Aber wenn ich aus meinem String (Der sieht zB so aus):
$string = "hier ist der text, den <b>ich euch</b> zeigen will";Alle Formatierungen lösche (also <b>, </b>) wie bekomme ich dann aus
$string = "hier ist der text, den ich euch zeigen will"; wieder meinen Originalstring?

Ich blick das irgendwie noch nicht...

Besten Dank aber das Ihr euch meiner annehmt...
- Server

Wenn Du hier eine Nachricht schreibst, schau dir doch mal die Formatierung
deiner Nachricht an, wenn Du einige Button ausprobierst.
Wie gesagt intern wird kein HTML in die DB geschrieben, sondern preg
Funktionen für das Einlesen + Auslesen der Daten benutzt.

Sorry, da ich dir aber nicht zutraue so etwas zusammenzuschrauben
(Die Jungs von Vb haben da wirklich lange daran gebastelt.)
mach es ohne HTML.

Server
10-07-2006, 15:48
ok, was ist denn der Unterschied wenn ich ein [b] oder ein <b> in die DB schiebe?
Also ich meine beim Auslesen und abschneiden des Strings! wenn ich später genau im [b]-Tag abschneide hab ich genau die gleichen Probleme als wenn ich <b> verwende...

Also selbst wenn ich das nun so mache, bringt mich das nicht wirklich weiter...

Romanday
10-07-2006, 16:03
ok, was ist denn der Unterschied wenn ich ein [b] oder ein <b> in die DB schiebe?


[b] kann z. B. später eine PDF Formatierungs - Anweisung werden, oder
die Waschmaschine ausstellen.:D

Turbohummel
10-07-2006, 17:58
Das kann <b> aber auch. Ist ja net gesagt, dass <b> fett bedeutet. Kommt immer auf den Interpreter des Textes an.
Wenn ich jemandem Sage, wenn du "<b>" liest, mach die Waschmaschine aus, dann macht er die Waschmaschine aus.
Insofern wäre das ziemlich wurscht.