![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 243 Pomógł: 33 Dołączył: 30.01.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam taki kod:
I wszystko ładnie działa tylko jeśli się napisze kilka razy ten tag: Kod [quote=test][quote=test2]to jest test[/quote][/quote] to dostaje coś takiego: Mógłby mnie ktoś naprowadzić dlaczego tak się dzieje? Dodam, że mam też inne znaczniki bbcode i np Kod [quote=cos][codee]kod[/codee][quote] działa poprawnie...pozdrawiam ps. zmienilem na quotee bo IPB zmienialo Ten post edytował Fafu 30.05.2009, 11:22:44 -------------------- http://rafal.brzezinski.me - skrypty, tutoriale i inne.
Jeśli udało Ci się rozwiązać problem podziękuj osobom, które ci pomogły. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
W parserach bbcode opartych na wyrazeniach regularnych jest o wiele trudniej to obejsc.
Twoje wyrazenie dziala w ten sposob ze od ciagu [quotee]szuka najblizszego zamkniecia czyli[/quotee] Rozwiazaniem w przypadku wyrazen regularnych jest usuniecie ? z wyrazenia. Wygladałoby to tak Kod "#\[quotee=(http://)?(.*?)\](.*)\[/quotee]#si" I wtedy rekurencyjnie sprawdzać kolejne zagnieżdzenia [quote] w wyszukanym tekscie. O wiele prostrzym rozwiązaniem jest skorzystanie z parserów nie działających na wyrażeniach regularnych. Ten post edytował wookieb 30.05.2009, 11:36:00 -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 243 Pomógł: 33 Dołączył: 30.01.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za odpowiedź. Usunięcie ? 'troche' pomogło... Teraz wyświetla się:
Kod <div class='cytat'> <div class='cytat_title'><b>test napisał:</b></div> <div class='cytat_area'>[quote=test2]to jest test[/quote]</div> </div> Mógłbyś rozwinąć temat parserów nie działających na wyrażeniach regularnych? Chciałem użyć twojego parsera ale potrzebuje coś małego a nie kombajn ![]() pozdrawiam Ten post edytował Fafu 30.05.2009, 11:38:34 -------------------- http://rafal.brzezinski.me - skrypty, tutoriale i inne.
Jeśli udało Ci się rozwiązać problem podziękuj osobom, które ci pomogły. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Parsery wyszukuja tagi za pomoca funkcji typu strpos.
Wycinaja z tekstu wszystkie elementy zawarte pomiedzy [] i sprawdzaja czy sa tagiem BB. Jezeli tak to je "interpretuja". Napisałem w " ", ponieważ po drodze może wystąpić parę inny czynników. W prostym parserze nie uzyskasz zagnieżdżeń nie przerabiając go na mały kombajnik. Ten post edytował wookieb 30.05.2009, 11:48:38 -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 243 Pomógł: 33 Dołączył: 30.01.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Znalazłem rozwiązanie które działa, chociaż jest bardzo nieprofesjonalne...
Kod // cytat z nickiem $str = preg_replace("#\[quote=(http://)?(.*?)\]#si", "<div class='cytat'><div class='cytat_title'><b>\\2 napisał:</b></div><div class='cytat_area'>", $str); $str = str_replace(array("[quote]", // zwykly cytat "[/quote]"), // zamkniecie array("<div class='cytat'><div class='cytat_title'><b>Cytat</b></div><div class='cytat_area'>", "</div></div>"), $str); Ale jak ktoś da samo [quote ] to rozwali stronę... Więc pomyślę nad tym.. Chyba zrobie tak ze strpos jeśli znajdzie [quote ] lub [quote= i nie znajdzie [/quote ] to nic nie zrobi. Dobry plan? ![]() -------------------- http://rafal.brzezinski.me - skrypty, tutoriale i inne.
Jeśli udało Ci się rozwiązać problem podziękuj osobom, które ci pomogły. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Najpierw zrób a potem zobaczymy czy dobrze i ewentualnei coś poprawimy.
-------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 243 Pomógł: 33 Dołączył: 30.01.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Kod if(strpos($str, "[quote]") !== false || strpos($str, "[quote=") !== false) { if(strpos($str, "[/quote]") !== false) { // cytat z nickiem $str = preg_replace("#\[quote=(http://)?(.*?)\]#si", "<div class='cytat'><div class='cytat_title'><b>\\2 napisał:</b></div><div class='cytat_area'>", $str); $str = str_replace(array("[quote]", // zwykly cytat "[/quote]"), // zamkniecie array("<div class='cytat'><div class='cytat_title'><b>Cytat</b></div><div class='cytat_area'>", "</div></div>"), $str); } } To działa lecz tylko dla Kod [quote=stsa]tresc dla Kod [quote=assad][quote]cos[/quote] nie bardzo :/ Jakiś pomysł jak zrobić liczbę wystąpień [quote ] ? -------------------- http://rafal.brzezinski.me - skrypty, tutoriale i inne.
Jeśli udało Ci się rozwiązać problem podziękuj osobom, które ci pomogły. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
-------------------- |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 243 Pomógł: 33 Dołączył: 30.01.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Kod if(strpos($str, "[quote]") !== false || strpos($str, "[quote=") !== false) { if(strpos($str, "[/quote]") !== false) { $quote1 = substr_count($str, "[quote]"); $quote2 = substr_count($str, "[/quote]"); $quote3 = substr_count($str, "[quote="); if($quote1 == $quote2-$quote3) { $str = str_replace(array("[quote]", // zwykly cytat "[/quote]"), // zamkniecie array("<div class='cytat'><div class='cytat_title'><b>Cytat</b></div><div class='cytat_area'>", "</div></div>"), $str); } if($quote3 == $quote2-$quote1) { // cytat z nickiem $str = preg_replace("#\[quote=(http://)?(.*?)\]#si", "<div class='cytat'><div class='cytat_title'><b>\\2 napisał:</b></div><div class='cytat_area'>", $str); $str = str_replace("[/quote]", "</div></div>", $str); } } } Mam takie coś ![]() I wyświetla dla: Kod [quote=cos]cos[quote]sad[/quote][/quote] W ogóle nie parsuje dla: Kod [quote=cos]cos[quote]sad[/quote] [quote=cos]cos[quote]sad[/quote][/quote][/quote] [quote=cos]cos[quote]sad Czyli chyba wszystko działa ![]() Kod [quote=cos]cos[quote]sad[/quote] jak wyświetlić jedynie ten poprawny? Hmm...
-------------------- http://rafal.brzezinski.me - skrypty, tutoriale i inne.
Jeśli udało Ci się rozwiązać problem podziękuj osobom, które ci pomogły. |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
str_replace" title="Zobacz w manualu PHP" target="_manual na bękarty. ;p
-------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 04:54 |