| 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! |
 |

20-05-2009, 12:44
|
|
dreman
Registrierter Benutzer
|
|
Registriert seit: May 2005
Beiträge: 137
|
|
Zeilenumbrüche innerhalb von <ul>'s entfernen
Hallo, bräuchte mal Hilfe!
ich habe folgenden Fließtext:
HTML-Code:
Text, viel Texte<br>
<ul><br>
<li>www</li><br>
<li>aaa</li><br>
<li>bbbb</li><br>
</ul><br>
Text, viel Texte<br>
bla
Dieses Problem ist durch die "nl2br"-Funktion "entstanden".
Gibt es eine Möglichkeit, alle <br>'s innerhalb von <ul>'s zu entfernen:
(analog <ol>'s)
Gewünschtes Ergebnis:
HTML-Code:
Text, viel Texte<br>
<ul>
<li>www</li>
<li>aaa</li>
<li>bbbb</li>
</ul><br>
Text, viel Texte<br>
bla
Danke für einen Tipp!
Oder Lösungsansatz!
|

20-05-2009, 12:46
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Wieso wendest du überhaupt nl2br() auf HTML an?
Das ist doch irgendwie... nunja.... zumindest komisch.
|

20-05-2009, 12:49
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
PHP-Code:
$text = 'Text, viel Texte<br>
<ul><br>
<li>www</li><br>
<li>aaa</li><br>
<li>bbbb</li><br>
</ul><br>
Text, viel Texte<br>
bla';
$neu_text = str_replace ('</li><br>', '</li>', $text);
z.b.
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

20-05-2009, 13:00
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Du solltest vor dem nl2br() alle Newlines zwischen HTML-Tags entfernen. Dann entstehen diese BRs gar nicht erst.
|

20-05-2009, 13:24
|
|
dreman
Registrierter Benutzer
|
|
Registriert seit: May 2005
Beiträge: 137
|
|
@all: Danke für die Tipps!
@onemorenerd: Vorher alle HTML-Tags von \n befreien: Aber wie?
|

20-05-2009, 13:39
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
PHP-Code:
$text = str_replace(">\n<", '><', $text);
Das wäre eine Möglichkeit. Die verhindert zwar auch, dass jemand die Zeichen > und < im Text benutzt und einen Zeilenumbruch dazwischen setzt. Aber wer macht schon sowas?
Ich würde allerdings mit regulären Ausdrücken rangehen (preg_replace()), um Whitespace rund um das \n zu erwischen.
Wenn du auch zu regulären Ausdrücken greifen willst, kannst du allerdings auch gleich auf nl2br() verzichten und stattdessen mit preg_replace() alle \n ersetzen, die nicht zwischen >< stehen.
Geändert von onemorenerd (20-05-2009 um 13:42 Uhr)
|

20-05-2009, 14:15
|
|
dreman
Registrierter Benutzer
|
|
Registriert seit: May 2005
Beiträge: 137
|
|
Cool, wie sähe das aus?
Versuch:
PHP-Code:
preg_replace('[nicht innerhalb von ><]', '\n', $text);
Wie kann ich diesen Bereich per RegExp ausschließen?
Habe leider recht wenig anhung von RegExp's...
Danke für eine Tip!
|

20-05-2009, 14:28
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Lies dir mal die User Comment zu nl2br() im Manual durch!
|

20-05-2009, 14:58
|
|
dreman
Registrierter Benutzer
|
|
Registriert seit: May 2005
Beiträge: 137
|
|
Guter Tipp, danke!:
PHP-Code:
function nl2br_skip_html($string)
{
// remove any carriage returns (mysql)
$string = str_replace("\r", '', $string);
// replace any newlines that aren't preceded by a > with a <br />
$string = preg_replace('/(?<!>)\n/', "<br />\n", $string);
return $string;
}
|
|
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
|