Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyrażenia regularne a BB Code
Snowak
post 13.12.2007, 13:21:56
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 2
Dołączył: 13.12.2007

Ostrzeżenie: (0%)
-----


Witam,
przy oprogramowywaniu BBCodu pojawił mi się niezbyt ciekawy problem... Przy niektórych tagach konieczne jest aby wszelkie tagi w nim nie były przetwarzane, przykładem takiego tagu może być chociażby [code]. Myślałem nad tym aby po prostu wywołać funkcję preg_replace_callback co dopasuje wszystkie takie tagi i pozamienia w ich zawartości wszelkie [ i ] na ich HTML-owe odpowiedniki &~;
No tylko problem jest jak to dopasować...

<code>#\(.*?)\#i</code>
Dopasuje mi pierwsze rozpoczęcie tagu [ b] i pierwsze pojawiające się zamknięcie, więc jeżeli zagnieździmy tagi w ten sposób: [ b]asd[ b]asd[ /b]asd[ /b] to to wszystko szlag trafi

Drugie co wymyśliłem to:
<code>#\(.*)\#i</code>
Ale w końcu wyszło, że jeżeli kod wygląda tak: [ b]asd[ /b] asd [ b] asd [ /b] to zamieni 1sze i ostatnie wystąpienie, czyli uzyskam coś w stylu < b>asd [ /b] asd [ b ] asd < /b>

Już dobre parę godzin nad tym siedzę i oprócz wyrażeń regularnych próbuję coś wymyśleć z funkcjami do obsługi tekstu z serii ~str~ ale nic mi nie wychodzi. Jak to można rozwiązać? W wyrażeniach regularnych to ja jestem ciemny i żadne manuale mnie nie zbawiły.

Z góry dziękuję za pomoc
Go to the top of the page
+Quote Post
SirZooro
post 13.12.2007, 18:18:21
Post #2





Grupa: Zarejestrowani
Postów: 243
Pomógł: 32
Dołączył: 14.06.2007

Ostrzeżenie: (0%)
-----


PEAR HTML_BBCodeParser się kłania smile.gif


--------------------
Go to the top of the page
+Quote Post
marcio
post 13.12.2007, 19:37:18
Post #3





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Moj bbcode tak wyglada ale nie wiem dlaczego nie dodaje buziek
  1. <?php
  2. function bbcode() {
  3. $zmien = htmlspecialchars(trim($zmien));
  4. $zmien = preg_replace("#(.*?)#si", "<A HREF=\"http://1\" TARGET=\"_blank\">2</A>", $zmien);
  5. $zmien = str_replace(":D","<img src='biggrin.gif' />", $zmien);
  6. $zmien = str_replace(":)","<img src='smile.gif' />", $zmien);
  7. $zmien = str_replace(":(","<img src='confused.gif' />", $zmien);
  8. $zmien = str_replace(";p","<img src='tongue.gif' />", $zmien);
  9. $zmien = str_replace(":]","<img src='cool.gif' />", $zmien);
  10. $zmien = str_replace("[:","<img src='bigrazz.gif' />", $zmien);
  11. $zmien = str_replace("()","<img src='wink.gif' />", $zmien);
  12. $zmien = preg_replace("#(.*?)#si", "<i>1</i>", $zmien);
  13. $zmien = preg_replace("#(.*?)#si", "<b>1</b>", $zmien);
  14. $zmien = preg_replace("#[ins](.*?)[/ins]#si", "<ins>1</ins>", $zmien);
  15. $zmien = preg_replace("#[small](.*?)[/small]#si", "<small>1</small>", $zmien);
  16. $zmien = preg_replace("#[big](.*?)[/big]#si", "<big>1</big>", $zmien);
  17. return $zmien;
  18. }
  19. ?>


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Snowak
post 13.12.2007, 20:04:47
Post #4





Grupa: Zarejestrowani
Postów: 78
Pomógł: 2
Dołączył: 13.12.2007

Ostrzeżenie: (0%)
-----


Nie dodaje Ci, bo parametru src nie podaje się w nawiasach ' lecz "...

Ten post edytował Snowak 13.12.2007, 21:53:12
Go to the top of the page
+Quote Post
marcio
post 13.12.2007, 20:11:41
Post #5





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Jak?Nie rozumiem mozesz to pokazac na moim kodzie?


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Snowak
post 13.12.2007, 21:56:55
Post #6





Grupa: Zarejestrowani
Postów: 78
Pomógł: 2
Dołączył: 13.12.2007

Ostrzeżenie: (0%)
-----


Zamień np. <img src='tongue.gif' /> na <img src="tongue.gif" />
Niektóre przeglądarki mają problem z tego typu nawiasami. A może po prostu zły adres emotki podajesz... A tak w ogóle to ta Twoja funkcja trochę dziwnie wygląda, zmienna $zmien bierze się znikąd smile.gif Nie sądzisz, że powinieneś ją podać jako parametr funkcji albo w ostateczności załadować przez global $zmienna; jeżeli takowa istnieje?

A co do tego PEAR HTML BBCode Parsera - próbowałem na jego podstawie coś napisać ale nic mi z tego nie wyszło, za bardzo mija się z moimi założeniami. Wygląda na to, że następne parę dni spędzę na monotonnym pisaniu parsera od 0 snitch.gif
Go to the top of the page
+Quote Post
marcio
post 14.12.2007, 16:34:31
Post #7





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Ok zaraz zobacze a funckja jest normalna paramtr sie daje jak chce sie cos dynamicznie zmienic a funckje tak wywoluje
  1. <?php
  2. bbcode($msg);
  3. ?>

wszystkie tagi dzialaja oprocz emotek i chyba masz racje czemu nie dzialalo

ok juz buzki dzialaja ale nie chodzilo o "" bo tak jest zbudowane str_replace lecz o \\ przed url emotki


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
jang
post 14.12.2007, 17:19:45
Post #8





Grupa: Zarejestrowani
Postów: 101
Pomógł: 11
Dołączył: 2.02.2005

Ostrzeżenie: (0%)
-----


Cytat(Snowak @ 13.12.2007, 21:56:55 ) *
Wygląda na to, że następne parę dni spędzę na monotonnym pisaniu parsera od 0 snitch.gif

Zaglądnij tutaj -> http://forum.php.pl/index.php?showtopic=13425&hl=bbcode może nie będziesz musiał się męczyć smile.gif


--------------------
$email = filter_var(filter_var($email, FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL);
if($email === false) {
// Houston, we have a problem....
}
Go to the top of the page
+Quote Post
Snowak
post 16.12.2007, 12:46:37
Post #9





Grupa: Zarejestrowani
Postów: 78
Pomógł: 2
Dołączył: 13.12.2007

Ostrzeżenie: (0%)
-----


Już dawno go napisałem smile.gif A ten kod w tym temacie nie rozwiązuje problemu... Ma za mało możliwości i napisany jest w dość lamerski sposób. U mnie to działa jak prawdziwy parser HTML czyli dodatkowo odczytuje wszystkie parametry, tj.
[ABC a=1 b='2' ten tekst nie zostanie przetworzony c="3"]asd[/ABC]
Wszystkie tagi są zamykane w odpowiednim miejscu tak że powstaje kod zgodny ze wszelkimi standardami XHTMLa, można wybrać czy wewnątrz danego tagu parsować następne tagi i emotki. A wszystkie tagi zamiast być opisane przez wyrażenia regularne, są opisane przez kod PHP który można dynamicznie edytować przy każdym tagu w panelu admina co daje praktycznie nieskończone możliwości smile.gif A na dodatek szybko działa.. ;o Kod zajął prawie 700 linijek (wraz z zaawansowanym systemem skalowania obrazków, jeżeli zachodzi taka konieczność), lol. Ale co ja poradzę.. projekt komercyjny ;s

Ten post edytował Snowak 16.12.2007, 13:21:31
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 14:35