Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z bb_codem, wyrażenia regularne
Forum PHP.pl > Forum > Przedszkole
phpuser
Mam problemik z bb_codem:

  1. <?php
  2. function bb_code($zrodlo){
  3. if(eregi("[highlight](.*)[/highlight]", $zrodlo,$out)){
  4.  $kod_php_example = "
  5.  <p/><div style=" border:1px solid black; padding:4px; background-color:#effdd7 ">".
  6.  
  7.  highlight_string($out[1],TRUE)."</div>";
  8.  
  9. $zrodlo = preg_replace("#[highlight](.*?)[/highlight]#si", $kod_php_example, $zrodlo);
  10. }
  11.  
  12. return $zrodlo;
  13. }
  14. ?>


kawałek treści z bazy danych
------------------------------------------------------------
[highlight]
treść 1
[/highlight]

[highlight]
treść 2
[/highlight]

------------------------------------------------------------
Problem polega na tym, że gdy w treści znajdzie się więcej niż jeden blok [highlight] treść n [/highlight]
to skrypt zamiast wyświetlać je osobno, łączy je i wyświetla tyle kopii ile jest bloków jak poniżej:

(dosłownie się taka treść pojawia przy dwóch div`ach)

treść1
[/highlight]

[highlight]
treść2

treść1
[/highlight]

[highlight]
treść2


Wygląda tak jakby brany był pod uwagę pierwszy znacznik [highlight] i ostatni znacznik [/highlight]
w całym tekscie pomijając te w środku.

Dziękuję z zgóry za podpowiedzi jak poprawić kod aby działał poprawnie.
P.S. Problem pojawia się przy więcej niż jednym bloku [highlight] treść n [/highlight] w treści.
Jim
  1. <?php
  2. $str = preg_replace_callback("#[highlight](.*?)[/highlight]#si", "highlight", $str);
  3.  
  4. function highlight($str){
  5. return '<div>'.$str[0].'</div>';
  6. }
  7. ?>


dodaje divy, ale zostawia [highlight].
hwao
[quote name='Jim' date='27.07.2006, 19:56 ' post='278393']
  1. <?php
  2. $str = preg_replace_callback("#[highlight](.*?)[/highlight]#si", "highlight", $str);
  3.  
  4. function highlight($str){
  5. return '<div>'.highlight_string( $str[1], true ).'</div>';
  6. }
  7. ?>

Ciut poprawnione smile.gif
seq
sprawdź wszystkie liniki skryptu bb_code może któraś się pozawijała i dlatego nie działa poprawnie

gdzieś już takie błędy widziałem winksmiley.jpg
kosheen2k
Ja bym zaproponował tak (u mnie działa):

  1. <?php
  2. function highlight_string($str) {
  3.  
  4. $str = preg_replace("#[highlight](.*?)[/highlight]#si", "<p><div style=" border:1px solid black; padding:4px; background-color:#effdd7 ">1</div></p>", $str);
  5.  
  6. return $str;
  7. }
  8. ?>


Pozdrawiam
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.