Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: własny BBCode
Forum PHP.pl > Forum > PHP
Denver
Witam. Mam problem z napisaniem zamieniania w php [quote=xywka] na cos innego.

Mam taki kod:

[php:1:6f190360cc]<?php
$text = preg_replace("#[quote=(.+)](.+)[/quote]#", "[Q]1[/Q]", $text);
?>[/php:1:6f190360cc]

Nie zawsze jednak działa.
Np. przy takim tekście:

Kod
[quote=Denver]cośtam....[/quote]





[quote=Denver]

cośtam....

[quote=Denver]blablabla[/quote]

blablabla

[/quote]



blablabla


Nie zostają zastąpione wszystkie znaczniki, rezultatem jest:

Kod
[Q]Denver[/Q]





[quote=Denver]

cośtam....

[Q]Denver[/Q]

blablabla

[/quote]



blablabla


Dlaczego? Co zrobić, aby także zagnieżdżane znaczniki (takie jak w przykladzie powyzej) zostaly wziete pod uwage?

Z gory dzieki.
bamboos
witam:)
'#[twoje wyrazenie]#m'
chodzi o to m smile.gif tzn zeby wykrywal wielolinijkowe (multi lines) tak mi sie wydaje
Denver
Niestety, dodanie m po wyrazeniu nic nie dalo... nadal zagniezdzone quote nie są wykrywane sad.gif

Robil ktos moze cos podobnego kiedys?
bamboos
Witam!!!
sorry .. moj blad smile.gif zamiast 'm' wstaw 's' smile.gif
Denver
bamboos - nawet 's' nie pomogło. poradziłem sobie w taki, dosyć zawiły sposób:

[php:1:104b7dc522]$quote_replacement = "[Q=1]2[/Q]";
$text = preg_replace("#
Cytat((.*?))
(.*?)
#sm", $quote_replacement, $text);
while (eregi ("
Cytat((.+))
(.+)
", $text)) {
$text = preg_replace("#
Cytat((.*?))
(.*?)
#sm",$quote_replacement, $text);
}[/php:1:104b7dc522]

oczywiscie zmienna $quote_replacement jest w rzeczywistosci inna i zawiera tabelkę obejmującą cytowaną wypowiedź...

dzięki bamboos za chęć pomocy.
bamboos
Witam!!
mi dziala bez problemu:
[php:1:552cf7d62e]<?php
$str = '[quote=asdf] asdf
asdf
adsdf
[/quote]';
$str = preg_replace('/[quote=(.+?)](.+?)[/quote]/s', '[q=1]2[/q]', $str);
echo $str;
?>[/php:1:552cf7d62e]
sprawdz to jeszcze raz smile.gif

-----------EDIT-----------

przy [/quote] nie masz '' przed '/'.. to moglo powodowac blad ?!? 8O
Denver
Mowilem wyraznie, ze ten kod nie dziala w zagniezdzonych cytatach, czyli w cytatach cytatów. Sprawdz sam. Moj skrypt dziala w tym przypadku dobrze smile.gif
bamboos
Witam ... ponownie smile.gif)!!
sorr .. nie testowalem w zagniezdzonych smile.gif
to powinno dzialac w zagniezdzonych (i jest troche wydajniejsze:) ) tzn pozbywasz sie ereg i preg_replace z petli i samej petli:
[php:1:471270d6d1]<?php
$str = '
Cytat(bamboos)
pierwsze
quote
Cytat(test)
a to  
jest quote w quote

koniec testu smile.gif
';
$str = preg_replace('/
Cytat((.+?))
/', '<q=1>', preg_replace('/
/', '</q>', $str));
echo $str;
?>[/php:1:471270d6d1]
i sorry za zamieszanie smile.gif
Denver
Twój kod tym razem działa, ale problem pojawia się w momencie, gdy jakiś tag quote nie zostanie zamknięty... w tym momencie, gdy ja to zamieniam na tabelki, to pochrzani się dalsza struktura forum, nie tylko posta.

Nadal jestem przy swoim smile.gif


#edit

ciekaw jestem jak to jest na tym forum: wstawię tutaj 2 tagi otwarcia cytatu, a 4 zamknicia:

[quote]
1 cytat
[quote]
2cytat
[/quote]
[/quote]

[/quote][/quote]

#edit2

jak widać, opuszcza 2 tagi zamykajace, tak jak moj skrypt.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.