| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

23-09-2009, 10:50
|
|
Frashier
Newbie
|
|
Registriert seit: Nov 2003
Beiträge: 116
|
|
Absätze im Text mit <p></p> einfassen
Ich stehe total auf dem schlauch, ich möchte in einem String/Text Absätze in <p></p> einfassen.
zb.
HTML-Code:
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.<br /><br />
Quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipisicing elit.
in
HTML-Code:
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.</p>
<p>Quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
Kann mir jemand das preg_replace oder anderen Lösungsansatz dazu Bitte geben. Bekomm es nicht hin.
|

23-09-2009, 10:56
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.178
|
|
String mit split aufteilen und dann für jedes Element ein <p> an den Anfang und ein </p> ans Ende.
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

23-09-2009, 12:38
|
|
Frashier
Newbie
|
|
Registriert seit: Nov 2003
Beiträge: 116
|
|
Jut habe ich:
HTML-Code:
$str = absatz(split("[\n\n]", $str));
function absatz($string) {
foreach($string as $val) {
trim($val);
if(!empty($val)) {
echo "<p>".$val."</p>\n\n";
}
}
}
Habe nur das Problem das er mir immer wieder ein leeres <p></p> reinhaut und kann es mit nur nicht erklären. Was mach ich falsch?
|

23-09-2009, 12:45
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.178
|
|
PHP-Code:
$str = absatz(split("[\n\n]", $str));
...
foreach($string as $val)
Du solltest dich schon entscheiden. $str oder $string.
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

23-09-2009, 12:47
|
|
Frashier
Newbie
|
|
Registriert seit: Nov 2003
Beiträge: 116
|
|
Zitat:
Zitat von Kropff
PHP-Code:
$str = absatz(split("[\n\n]", $str));
...
foreach($string as $val)
Du solltest dich schon entscheiden. $str oder $string.
Peter
|
Ist nicht wirklich das Problem, kommt nur weil ich das split in einer anderen Funktion habe.
|

23-09-2009, 12:49
|
|
Frashier
Newbie
|
|
Registriert seit: Nov 2003
Beiträge: 116
|
|
Ich habs, mal am Regulären Ausdruck gearbeitet (wie ich den Mist hasse)
$str = absatz(split("\r\n|\n|\r", $str));
|

23-09-2009, 12:49
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Ort: Dresden
Beiträge: 5.463
|
|
Hallo,
die Funktion trim arbeitet nicht so wie du denkst. Die ändert den String nicht, sondern gibt einen neuen zurück.
Probier's mal so:
PHP-Code:
$str = absatz(split("[\n\n]", $str));
function absatz($string) {
foreach($string as $val) {
if(!trim($val)) {
echo "<p>".$val."</p>\n\n";
}
}
}
Gruß,
Amica
|

23-09-2009, 23:08
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 644
|
|
Zitat:
Zitat von Frashier
Jut habe ich:
HTML-Code:
...
trim($val);
if(!empty($val)) {
echo "<p>".$val."</p>\n\n";
}
...
Habe nur das Problem das er mir immer wieder ein leeres <p></p> reinhaut und kann es mit nur nicht erklären. Was mach ich falsch?
|
Eine Zeichenkette prüft man mit !isset($string[0]) und nicht mit empty($string) auf "Leere".
Aber das ist nicht das eigentliche Problem.
"Leere" Zeilen würde ich so ausschließen:
PHP-Code:
foreach () {
// ...
if (preg_match('/\A\s*\z/', $val)) {
continue;
}
// ...
}
Und wenn man einmal dabei ist, könnte man das ganze Problem vielleicht auch simpler lösen:
PHP-Code:
function paragraph($string) {
return '<p>' . preg_replace('/(?:\r\n|[\r\n]){2,}/', '</p><p>', $string) . '</p>';
}
Für schöneren HTML-Quelltext musst du notfalls noch ein paar Zeilenumbrüche im Ersetzen-String einfügen.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|

24-09-2009, 01:52
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Ort: Dresden
Beiträge: 5.463
|
|
Zitat:
Zitat von fireweasel
Eine Zeichenkette prüft man mit !isset($string[0]) und nicht mit empty($string) auf "Leere".
|
Wer sagt das denn außer dir?
Gruß,
Amica
|

24-09-2009, 02:11
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.455
|
|
Zitat:
Zitat von AmicaNoctis
Zitat:
Zitat von fireweasel
Eine Zeichenkette prüft man mit !isset($string[0]) und nicht mit empty($string) auf "Leere".
|
Wer sagt das denn außer dir?
|
Hab mich auch erst gewundert - aber ich vermute, damit will fireweasel umgehen, dass auch "0" von empty als leer erkannt würde.
Quasi eine leicht "geekigere" Variante von isset($string) && $string !== ""
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

24-09-2009, 02:19
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Ort: Dresden
Beiträge: 5.463
|
|
Ah ja, danke, da find ich aber !strlen($string) trotzdem noch kürzer und intuitiver. Es könnte zwar im Allgemeinen zu ner Warnung führen, aber innerhalb von foreach (wie im Fall des Fragestellers) kann das ja nicht passieren.
|

24-09-2009, 15:28
|
 |
schmalle
  Ich Root, Du nix
|
|
Registriert seit: Jun 2001
Ort: Egelsbach FFM
Beiträge: 9.170
|
|
PHP-Code:
$str = preg_replace("%(<br />)([\s]*?)(<br />)%si", "</p><p>", $str); $str = "<p>".$str."</p>";
|

25-09-2009, 16:56
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 644
|
|
Zitat:
|
Wer sagt das denn außer dir?
|
Alle die, die schlauer sind als ich (z.B. der hier). Das ist ganz sicher nicht auf meinem Mist gewachsen.
Zitat:
Zitat von AmicaNoctis
Ah ja, danke, da find ich aber !strlen($string) trotzdem noch kürzer und intuitiver.
|
Die Betonung sollte nicht auf der Verwendung von !isset($string[0]) liegen, sondern auf der NICHTverwendung von empty(), dessen Bezeichnung IMHO falsch gewählt ist. Sowas wie yields_to_false() würde besser passen ...
Für PHP-Verhältnisse ist !strlen($string) sicher die "intuitivste" Variante. Ich hätte lieber sowas wie $string->is_empty() oder notfalls eben is_empty($string) und als Rückgabewert TRUE für leere Strings und nichtexistierende Variablennamen. Muss man sich selber basteln.
Zitat:
Zitat von wahsaga
...
Quasi eine leicht "geekigere" Variante von isset($string) && $string !== "" 
|
Geekig? Ich verwende diese Schreibweise schon so lange, dass ich mich nicht mehr daran erinnern kann, warum ich mir sie angewöhnt hatte. Ich befürchte fast, es war aus Gründen der bösen, bösen Mikrooptimierung.
" ... it's about 33% faster" sagt doch eigentlich schon alles.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
Geändert von fireweasel (25-09-2009 um 16:58 Uhr)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
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.
HTML-Code ist aus.
|
|
|
|
PHP News
|