|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Revil Senior JLI'ler
Anmeldedatum: 28.07.2002 Beiträge: 242
Medaillen: Keine
|
Verfasst am: 11.06.2003, 16:59 Titel: <php> Umbruch in String einfügen |
|
|
Hey,
Ich arbeite zur Zeit an meiner neuen Homepage. Dazu verwende ich PHP und MySQL.
Um zu verhindern das jemand sehr breite Einträge bei den Kommentaren meiner Newspage macht, in dem er z.B. eine Reihe ala
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
usw. spamt, muß ich solche Strings durch Umbruchzeichen teilen. Ich könnte jetzt den String auf die Länge hin überprüfen, dann nach Leerzeichen oder vorhandenen Umbrüchen suchen und dann dementsprechend Umbrüche einfügen lassen.
Aber da dies vielleicht ein häufiges Problem ist, gibt es in PHP oder in MySQL bereits eine vorgefertigte Funktion dafür?! Weiß da jemand eine? _________________
Take this
Code: | php -r "print rand(-1,0)?Gewonnen:Verloren;"
|
and this
Code: | perl -e "print( ('Gewonnen', 'Verloren')[rand 2])"
|
|
|
Nach oben |
|
|
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 11.06.2003, 17:59 Titel: |
|
|
du könntest nach jedem Xten zeichen ein <br> machen:
Code: |
$zeilenumbruch = 100;
for ($i = 0; $i < strlen($string); $i++)
{
echo $string[$i];
if ($i == $zeilenumbruch)
{
echo "<br>";
$zeilenumbruch += 100;
}
}
|
anders wüste ich im moment keine lösung, ist mir so spotan gekommen |
|
Nach oben |
|
|
Jörg JLI MVP
Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 11.06.2003, 18:21 Titel: |
|
|
Ist es überhaupt notwendig, den Umbruch manuell einzufügen? Der Browser macht den doch automatisch.
Wenn ein String ein zu langes Wort enthält, kannst du dem User ja einfach verbieten, seine Nachricht abzuschicken. _________________ www.messiahzone.de.vu |
|
Nach oben |
|
|
Mr.X Junior JLI'ler
Anmeldedatum: 15.04.2003 Beiträge: 88
Medaillen: Keine
|
Verfasst am: 11.06.2003, 18:30 Titel: ... |
|
|
ganz recht, solch eine Funktion gibt es in PHP:
wordwrap()
Diese macht genau das, was Du willst, eben weil es ein häufiges Problem ist ^^
kleines Beispiel:
Code: |
<?PHP
$string = "Hier ist ein laaaaaaaaaaaaaaaaaaaaaaaaaaanges Wort";
$string = wordwrap( $string,20, "<br>", 1);
echo $string;
?>
|
Hier kann man Wörter mit maximal 20 Zeichen eingeben und eine Zeile enthält auch nur maximal 20 Zeichen! Ist eines länger, wie im obigen Beispiel das "laaa....ange", dann wird nach 20 Zeichen das eigens definierte Trennzeichen (im Beispiel "<br>") eingefügt!
Das Beispiel würde folgendes ausgeben:
Zitat: |
Hier ist ein
laaaaaaaaaaaaaaaaaa
aaaaaaaaanges Wort
|
Hierbei werden nur solange Wörter in eine Zeile geschrieben, bis die maximale Zeichenlänge erreicht ist! Im Beispiel sind's 3 Wörter: "Hier ist ein". Durch das nächste Wort würde die maximale Zeichenlänge pro Zeile überschritten, also fügt wordwrap() ein "<br>" ein. Das nächste Wort soll also nun in der neuen Zeile geschrieben werden, da aber das Wort selber schon über die 20 Zeichen kommt, so erzwingt wordwrap() (der letzte Parameter 1 der Funktion "erzwingt" dies) durch Einfügen von "<br>" nach dem 20. Zeichen den Zeilenumbruch und fängt erneut bei 0 an zu zählen. Hierbei passen sowohl der Rest des Wortes als auch noch das letzte Wort innerhalb der nächsten Zeile/20 Zeichen, was die Ausgabe "aaaaaaaaanges Wort" in der letzten Zeil zur Folge hat!
@ DarK:
Durch diesen Vorschlag würde der Text unleserlich, da so auch innerhalb von Wörtern ein Zeilenumbruch eingefügt wird!
Beispiel nach Deiner Methode mit Zeilenumbruch nach 7. Zeichen:
Zitat: |
Hier st
ehen di
e neues
ten New
s
|
gleiches Beispiel mit wordwrap($string,7, "<br>", 1):
Zitat: |
Hier
stehen
die
neueste
n News
|
@ Jörg:
Nein, der Browser nimmt keinen Zeilenumbruch vor, wenn ein Wort länger ist, als es ein Bildschirm in seiner Breite anzeigen könnte (bzw. wenn es länger ist, als die HTML-Tabelle Platz vorgesehen hat, was zu unschönen HTML-Tabellen-Verzerrungen führt). Es würden dann seitliche Scrollbalken am Fenster erscheinen, aber nicht das Wort geteilt!
Und dem User die Möglichkeit nehmen lange Wörter einzugeben, ist wohl auch so etwas wie die Problem aus dem Weg gehen, indem man es garnicht erst zulässt. IMHO kein schöner Programmierstil
mfG
Zuletzt bearbeitet von Mr.X am 11.06.2003, 18:59, insgesamt 3-mal bearbeitet |
|
Nach oben |
|
|
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 11.06.2003, 18:52 Titel: |
|
|
doch noch was dazu gelernt |
|
Nach oben |
|
|
Revil Senior JLI'ler
Anmeldedatum: 28.07.2002 Beiträge: 242
Medaillen: Keine
|
Verfasst am: 11.06.2003, 21:08 Titel: |
|
|
ThXxX Mr.X, genau sowas hab ich gesucht =D _________________
Take this
Code: | php -r "print rand(-1,0)?Gewonnen:Verloren;"
|
and this
Code: | perl -e "print( ('Gewonnen', 'Verloren')[rand 2])"
|
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 12.06.2003, 06:18 Titel: |
|
|
Naja Mr. X deine Ausführung war etwas zu lang und dabei könnte man denken, dass einer hier denken mag, wir alle wären dumm...war etwas zu ausführlich! Aber jetzt sollte es jeder gecheckt haben!
Für alle die, die eigentlich das Wichtigste und Nötigste für diese Funktion wissen wollten:
Zitat: |
wordwrap -- Wraps a string to a given number of characters using a string break character.
Description
string wordwrap ( string str [, int width [, string break [, boolean cut]]])
Returns a string with str wrapped at the column number specified by the optional width parameter. The line is broken using the (optional) break parameter.
wordwrap() will automatically wrap at column 75 and break using '\n' (newline) if width or break are not given.
If the cut is set to 1, the string is always wrapped at the specified width. So if you have a word that is larger than the given width, it is broken apart.
|
_________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Mr.X Junior JLI'ler
Anmeldedatum: 15.04.2003 Beiträge: 88
Medaillen: Keine
|
Verfasst am: 12.06.2003, 08:05 Titel: ... |
|
|
@TheMillenium
Lieber einmal der Soll-Philosophie eines Frage-Antwort-Forums folgen und eine ausführliche Antwort mit Beispiel,
oder aber der (leider) gängigen Philosophie folgen und "Copy'n Paste"-Auszüge der jedem zugänglichen (zumeist für Anfänger kryptischen) Hilfebibliotheken posten?
Was ergibt mehr Sinn???
---------------------------------------------------------------------------------------------------------------------------------
Zitat: |
...dass einer hier denken mag, wir alle wären dumm...
|
Stell Dir vor, in einem Seminar liesst der Tutor lediglich aus einem "C++-Taschenbuch" Funktionsköpfe+Parameter vor und erklärt sie WEDER an einem Beispiel noch was sie GENAU bewirken, weil er ja davon ausgehen muss, das mindestens EINER in der Zuhörergruppe die Funktion und deren Funktionsweise kennt!
Was ist hier falsch???
-------------------------------------------------------------------------------------------------------------------------------
BTW Konflikte beruhen auf Missverständnissen! Ich glaube Du hast meinen Post falsch aufgefasst, und ich Deinen darauf folgenden Beitrag missverstanden.
mfG |
|
Nach oben |
|
|
Revil Senior JLI'ler
Anmeldedatum: 28.07.2002 Beiträge: 242
Medaillen: Keine
|
Verfasst am: 12.06.2003, 11:03 Titel: |
|
|
Ich finde die Ausführung zeugt davon das sich hier jemand ernsthaft darum bemüht eine Frage ausführlich zu klären, und sowas seh ich als bewunderns-/erstrebenswert an. _________________
Take this
Code: | php -r "print rand(-1,0)?Gewonnen:Verloren;"
|
and this
Code: | perl -e "print( ('Gewonnen', 'Verloren')[rand 2])"
|
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 12.06.2003, 20:20 Titel: |
|
|
Ich bezihe mich eigentlich nur auf den Text nach deinem ersten Zitat:
Zitat: |
Hier ist ein
laaaaaaaaaaaaaaaaaa
aaaaaaaaanges Wort
|
Davor fand ich das schon gut genug erklärt, aber hast schon Recht: Schaden kann es ja nicht!
Naja Copy & Past von Bibliotheken/... finde ich eigentlich meist besser, wenn das schon selbsterklärend genug ist, ansonsten so wie du es gemacht hast, ist es dann perfekt, aber da kann man sich streiten!
Aber die Funktion ist eigentlich schon praktisch..hatte sowas davor für mein eines Skript selber programmieren muss...naja man lernt immer weiter... _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|