Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg_replace - problem z bbcode
Forum PHP.pl > Forum > PHP
deha21
Potrzebuję zrobić cytowanie w komentarzach na mojej stronie. Mam taką funkcję, którą przekopiowałem z innego mojego serwisu:
  1. function conv($str) {
  2.  
  3. $str=stripslashes(preg_replace('{(https?:\/\/[a-zA-Z0-9.$&=+_\-\/@ąćęłńóśżź][^\n\s]*)}','<a href="$1">$1</a> ',$str));
  4.  
  5. $patern="#\[quote=([^\]]*)\]#i";
  6. $replace='<div class="quote"><span>\\1:</span>';
  7. $str=preg_replace($patern, $replace, $str);
  8.  
  9. $patern="#([^\[]*)\[/quote\]#i";
  10. $replace='\\1</div>';
  11. $str=preg_replace($patern, $replace, $str);
  12.  
  13. echo '<p>',nl2br($str),'</p>';
  14.  
  15. }

Wszystko się robi ale zamiast tekstu w <p>bla bla bla</p> mam:
  1. <p></p>
  2. bla bla bla
  3. <p></p>

Dlaczego tak się dzieje? Uprzedzę pytania - w kodzie html na pewno mam wszystko ok (nie ma niedomkniętych znaczników itd.)
cudny
Wyświetl:

  1. echo '<p>',htmlspecialchars( nl2br($str) ),'</p>';


Założę się, że jest tam <div> lub <p>
deha21
Cytat(cudny @ 6.12.2012, 23:15:26 ) *
Założę się, że jest tam <div> lub <p>

Tak, w środku jest <div> ale jest domknięty to chyba nie powinno mieć znaczenia? O to chodzi że chce z [ quote=xxx ] tekst [ /quote ] zrobić żeby się wyświetlało <div class="quote"><span>napisal</span>tekst</div>
Dlatego też nie mogę użyć htmlspecialchars bo mi zamieni znaczniki na tekst.
cudny
właśnie po to chciałem żebyś pokazał mi co jest wewnątrz paragrafów.
Poczytaj o specyfikacji html i tym co można zagnieżdżać wewnątrz paragrafów, bo na pewno nie bloki <div> stąd wywala Ci <p> w kosmos.
deha21
Hmm rzeczywiscie. Wiem, że divów nie powinno się w <p> umieszczać ale myślałem, że nie rozwali kody - najwyżej nie przejdzie walidacji. Zmieniłem na <span> i działa.
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.