• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

php problem :/

cart

Technik/Software Forum
Mitglied seit
01.08.2002
Beiträge
4.873
Reaktionen
0
Ort
New York
ich hab folgendes replace:

$news = preg_replace( "/\[li\](.*?)\[\/li\]/", "<li>$1</li>", $news);


das problem ist, dass es nicht funktioniert, wenn zwishen
[li] und [/li] ein zeilenumbruch ist.
plz help :bored:
 

gim~li

Guest
Dann musst du vorher aus $news alle Zeilenumbrüche entfernen ...
 

cart

Technik/Software Forum
Mitglied seit
01.08.2002
Beiträge
4.873
Reaktionen
0
Ort
New York
lol? und wie bekomme ich sie dann wieder?

das hier kommt übrigens ganz am anfang von dem kompletten replace script:

$news = nl2br(stripslashes($daten['news']));

danach kommen div replaces u.a. auch das [li] ding.
 

Wiseguy3

Guest
Du brauchst den Switch "s" - der matcht über mehrere Zeilen.

So also:
Code:
$news = preg_replace( "/\[li\](.*?)\[\/li\]/s", "<li>$1</li>", $news);

Übrigens würde ich auch noch "i" und "U" als Switch nehmen. Also besser so:

Code:
$news = preg_replace( "/\[li\](.*?)\[\/li\]/isU", "<li>$1</li>", $news);

Dann hast du keine Probleme mehr mit Gross und Kleinschreibung der Tags, Zeilenumbrüchen und zu "gierigem" Suchen...
 

cart

Technik/Software Forum
Mitglied seit
01.08.2002
Beiträge
4.873
Reaktionen
0
Ort
New York
ich hatte es jetzt zwar so gelöst
$news = preg_replace('/'.preg_quote('[li]','/').'(.*?)'.preg_quote('[/li]','/').'/is', '<li>$1</li>', $news);
aber deine lösung ist doch deutlich weniger text :)
 

Wiseguy3

Guest
Deine Lösung ist auch problematisch, wenn du

Code:
[li]erster listeneintrag[/li]
[li]zweiter listeneintrag[/li]

hast.

Dein Regexp mach daraus nämlich:


Code:
<li>erster listeneintrag[/li]
[li]zweiter listeneintrag</li>
weil es greedy matcht.
 

cart

Technik/Software Forum
Mitglied seit
01.08.2002
Beiträge
4.873
Reaktionen
0
Ort
New York
eigentlich machte deine lösung das, wenn ich das U mit drin hatte... wenn das raus war gings. aber mit preg_quote() gings einwandfrei. war halt nur fast doppelt soviel text^^ :) ich habs jetzt durchgängig für den kompletten code so:
$news = preg_replace( "/\[li\](.*?)\[\/li\]/si", "<li>$1</li>", $news);
 
Mitglied seit
20.09.2001
Beiträge
1.355
Reaktionen
0
Original geschrieben von BiBaButzemann
machs doch einfach mit str_replace() ...

bei str_replace kannst nur string teile komplett ersetzen nicht aber geschlossende code tags wie es in foren, news oder kommentar scripts geused wird :)
 
Mitglied seit
03.08.2002
Beiträge
3.257
Reaktionen
14
er will doch nur sein [li] durch <li> ersetzen lassen und das geht doch ganz prima mit str_replace().
 
Mitglied seit
20.09.2001
Beiträge
1.355
Reaktionen
0
er will [li] durch <li> nur dann ersetzen wenns ebenfalls durch [/li] abgeschlossen wird, sonst kann man gleich html dem user zur verfügung stellen damit er alles schrottet :p
 

The_Company

Guest
Was macht die Regexp aus "[li] 1 [li] 2 [/li] 3 [/li]" ?

Vermutlich "<li> 1 [li] 2 </li> 3 [/li]", oder?
 

Wiseguy3

Guest
Original geschrieben von The_Company
Was macht die Regexp aus "[li] 1 [li] 2 [/li] 3 [/li]" ?

Vermutlich "<li> 1 [li] 2 </li> 3 [/li]", oder?
Ja, könnte so sein. Ist aber immer das Problem bei Regexp, weil sie den Status des aktuellen Strings nicht speichern (schon geöffnet, noch nicht geöffnet).

Da hilft nur n Parser...
 

cart

Technik/Software Forum
Mitglied seit
01.08.2002
Beiträge
4.873
Reaktionen
0
Ort
New York
die einzige lösung, ausser meiner preg_quote()-lösung, die funktioniert ist diese:
$news = preg_replace( "/\[li\](.*?)\[\/li\]/si", "<li>$1</li>", $news);

da macht er auch net aus

[li] 1 [li] 2 [/li] 3 [/li] -> <li> 1 [li] 2 </li> 3 [/li]

biba: str_replace gibt mir aber keine überprüfungsmöglichkeit für [/li].
 
Mitglied seit
03.08.2002
Beiträge
3.257
Reaktionen
14
jojo, hab nur halbherzig geschaut...

nehme alles zurück und behaupte das gegenteil.
 
Oben