Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML] Pisanie bbcode
Forum PHP.pl > Forum > Przedszkole
NaVarion
Hej.. Robię stronkę, i chcę, by osoba która dodaje newsy mogła korzystać z następujących znaczników bbcode: b, u, i oraz color.
Po wygenerowaniu tego kodu przez generator bbcode (http://bbcode.strefaphp.net/bbcode.php):

  1. <?php
  2. // bbcode
  3. Function bbcode($str){
  4.  
  5. // usun zbedne
  6. $str=htmlspecialchars(trim($str));
  7.  
  8. // Pogrubiony tekst
  9. $str = preg_replace("#(.*?)#si", "<b>1</b>", $str);
  10.  
  11. // Pochylony tekst
  12. $str = preg_replace("#(.*?)#si", "<i>1</i>", $str);
  13.  
  14. // Podkreślony tekst
  15. $str = preg_replace("#(.*?)#si", "<u>1</u>", $str);
  16.  
  17. // Kolor tekstu
  18. $str = preg_replace("#(.*?)#si", "<span style=\"color:2\">3</span>", $str);
  19.  
  20. // kolejny wiersz
  21. $str=nl2br($str);
  22.  
  23. // js
  24. $str = preg_replace_callback("#<(.*?)javascript(.*?)>#si", "bbcode_js", $str);
  25.  
  26. // wynik
  27. return $str;}
  28.  
  29.  
  30. // anti js
  31. Function bbcode_js($str){
  32. if(!eregi('<a href=\"javascript:mailto:mail('',$str[0])){
  33. return str_replace('javascript','java_script',$str[0]);
  34. }else{return $str[0];}}
  35. ?>


Kod ten dałem do bbcode.php, a w pliku news.php napisałem:

  1. <?php
  2. echo '
  3. <form method="POST" action="news.php?dodaj=dodaj">
  4. <table>
  5. <tr>
  6. <td>Tytuł</td>
  7. <td><input type="text" name="tytul">
  8. </tr>
  9. <tr>
  10. <td>Data</td>
  11. <td><input type="text" name="data"> (np. 16 sierpnia 2008)
  12. </tr>
  13. <tr>
  14. <td>Tresć</td>
  15. <td><textarea name="tresc" cols="40" rows="15">Tresć</textarea></td>
  16. </tr>
  17.  
  18. <td><input type="submit" value="Dodaj news"></td>
  19. </tr>
  20. </table>
  21. </form>
  22.  
  23. ';
  24. } elseif($_GET['dodaj'] == 'dodaj') {
  25. $tytul = $_POST['tytul'];
  26. $data = $_POST['data'];
  27. $tresc = $_POST['tresc'];
  28. $autor = $user['user'];
  29. if(!$tytul || !$data || !$tresc) {
  30. echo 'Musisz wypełnić wszystkie pola!';
  31. require('../include/foot.php');
  32. }
  33. require("bbcode.php");
  34.  
  35. bbcode($tresc);
  36.  
  37. mysql_query("INSERT INTO news (tytul, data, tresc, autor) values ('$tytul', '$data', '$tresc', '$autor')") or die ('Error: ' . mysql_error());
  38. echo 'Dodałem nowy news!!';
  39. ?>


Jednak gdy wpisuję w treści newsa np. [ b ]test[ /b ] (bez spacji), to w wyświetlaniu newsów na stronie głównej pokazuje się właśnie [ b ]test[ /b ] (bez spacji) a nie test ;/

Może mi ktoś pomóc?

Pozdrawiam!
Shili
Spróbuj:
  1. <?php
  2. $tresc = bbcode($tresc);
  3. ?>
pyro
  1. <?php
  2. $str = preg_replace("#(.*?)#si", "<span style=\"color:2\">3</span>", $str);
  3. ?>

trzeba też ostrożnie:

// EDIT, dodalem spacje bo forum ma bbcode

[ color=red" onMouseOver="<script>alert('XSS');</script>]test[ /color]

nie testowałem w praktyce ale mniej wiecej to tak wyglada
NaVarion
Wybacz pyro, lecz nie zrozumiałem twojego postu ;/

Co do poprzedniego kolegi, zrobiłem tak jak napisałeś, i po napisaniu takiego newsa:

Cytat
test b: b
test i: i
test u: u
test coloru color

(tu się od razu zmieniło na bbcode, tam napisałem to w [ i ])

pojawia mi się:

Cytat
3b>
3i>
3u>
333u [333ed]3[333][333een]3333r]
pyro
poprawiłem swój ostatni post bo sie podwoił =P
NaVarion
Sekundkę, ty mi chyba podajesz coś jak "zhakować" ten kod, nie? Zabezpieczenia potem, pierw prosił bym o pomoc, by to działało tongue.gif
Shili
Cytat
Co do poprzedniego kolegi...
Koleżanki winksmiley.jpg

Po kolei - wyrażenie regularne powinno wyglądać tak:
  1. <?php
  2. $str = preg_replace("#(.*?)#si", "<b>1</b>", $str);
  3. ?>

Dokładnie tak, z tymi wszystkimi ukośnikami. Jeśli tak faktycznie masz, to powinno Ci zamieniać poprawnie, u mnie dokładnie to robi.
NaVarion
Pokornie przepraszam za nazwanie cię kolegą tongue.gif

Mam tak, jednak mi nie działa ;/
Może przy wyświetlaniu też trzeba dać jakiś kod?
Shili
A spróbuj dać:
echo bbcode($tresc);
i zakomentować dodawanie do bazy. Też wychodzą Ci takie rzeczy?
NaVarion
Hmm.. Jak się "komentuje dodanie do bazy"? smile.gif
Shili
  1. <?php
  2. echo bbcode($tresc);
  3.  
  4. //mysql_query("INSERT INTO news (tytul, data, tresc, autor) values ('$tytul', '$data', '$tresc', '$autor')") or die ('Error: ' . mysql_error());
  5. //echo 'Dodałem nowy news!!';
  6. ?>
Crozin
Poczytaj o zasięgu zmiennych i referencjach
  1. <?
  2. $tresc = bbcode($tresc);
  3. ?>
Ale zamieniać BBCode powinno się przy wyswietlaniu, a nie zapisywaniu danych
NaVarion
Zrobiłem tak,

  1. <?php
  2. $tresc = bbcode($news['tresc']);
  3. ?>


ale teraz mam w newsie tak:
Cytat
&3e3333333s33 33e3333333s33 33e3333333s33 33e3333333s33e3333333s33e3333333s33e3333333s33e3333333s33e3333333s33e3333333s33e
333333s33e3333333s33e3333333s33e3333333s33e3333333s33e3333333s33e3333333s33e3333
33s33e3333333s33e3333333s3]
Shili
Musisz mieć coś naprawdę mocno skopane.
Prześlij jeszcze raz ten kod z którego aktualnie korzystasz.
NaVarion
Pisanie newsów:

  1. <?php
  2. if($_GET['action'] == 'dodaj' && !$_GET['dodaj']) { 
  3. echo '
  4. <form method="POST" action="news.php?dodaj=dodaj">
  5. <table>
  6. <tr>
  7. <td>Tytuł</td>
  8. <td><input type="text" name="tytul">
  9. </tr>
  10. <tr>
  11. <td>Data</td>
  12. <td><input type="text" name="data"> (np. 16 sierpnia 2008)
  13. </tr>
  14. <tr>
  15. <td>Tresć</td>
  16. <td><textarea name="tresc" cols="40" rows="15">Tresć</textarea></td>
  17. </tr>
  18.  
  19. <td><input type="submit" value="Dodaj news"></td>
  20. </tr>
  21. </table>
  22. </form>
  23.  
  24. ';
  25. } elseif($_GET['dodaj'] == 'dodaj') {
  26. $tytul = $_POST['tytul'];
  27. $data = $_POST['data'];
  28. $tresc = $_POST['tresc'];
  29. $autor = $user['user'];
  30. if(!$tytul || !$data || !$tresc) {
  31. echo 'Musisz wypełnić wszystkie pola!';
  32. require('../include/foot.php');
  33. }
  34. require("bbcode.php");
  35.  
  36. $tresc2 = bbcode($tresc);
  37.  
  38. mysql_query("INSERT INTO news (tytul, data, tresc, autor) values ('$tytul', '$data', '$tresc2', '$autor')") or die ('Error: ' . mysql_error());
  39. echo 'Dodałem nowy news!!';
  40. }
  41. ?>


Odczytywanie newsów:


  1. <?php
  2. require("include/head.php");
  3. require("bbcode.php");
  4. ?>
  5. <div style="background-color: yellow">
  6.  
  7. <span style="color: red; font-size: 20px;">Po rejestracji w naszym serwisie dostajesz dostęp do wielu typów gier na różn
    e rozdzielczosci i telefony!<br></span>
  8. <span style="color: green; font-size: 20px;">Nie zwlekaj!! Przejdź do rejestracji i sciągaj do woli!</span>
  9. </div><br>
  10. <?
  11. $czy_sa_newsy = mysql_num_rows(mysql_query("SELECT id FROM news"));
  12. if($czy_sa_newsy == 0) {
  13. echo 'W bazie nie ma żadnych newsów!';
  14. } else {
  15. $newsy = mysql_query("SELECT * FROM news ORDER BY id DESC");
  16. while ($news = mysql_fetch_array($newsy)) {
  17. $tresc = bbcode($news['tresc']);
  18. echo '
  19. <table>
  20. <tr bgcolor="#a7a7a7"><td height="40"><span style="font-size: 18px;">'.$news['tytul'].'</span></td></tr>
  21.  
  22. <tr bgcolor="#efefef">
  23. <td>
  24.  '.$tresc.
  25.  </td>
  26. </tr>
  27. </table>
  28. <table>
  29. <tr bgcolor="Silver">
  30. <td width="300" height="30"> <img src="theme/'.$ustawienie['styl'].'/img/czas.gif"> Data: '.$news['data'].' </td>
  31. <td width="300" height="30"> <img src="theme/'.$ustawienie['styl'].'/img/autor.gif"> Dodał: '.$news['autor'].'</td>
  32. </tr>
  33. </table>
  34. <br><br>
  35. ';
  36. }
  37. }
  38. require("include/foot.php");
  39. ?>
Crozin
pokaz bbcode.php
NaVarion
Dziwne, zrobiłem to samo, napisałem od nowa, wkleiłem skrypt tylko bez opcji kolorów i działa, tylko z błędem:

Fatal error: Cannot redeclare bbcode() (previously declared in /var/www/sites/yoyo.pl/n/a/navarionek/bbcode.php:3) in /var/www/sites/yoyo.pl/n/a/navarionek/bbcode.php on line 3

BBcode:

[php]// bbcode
Function bbcode($str){

// usun zbedne
$str=htmlspecialchars(trim($str));

// Pogrubiony tekst
$str = preg_replace(\"#\[b\](.*?)\[/b\]#si\", \"\\1\", $str);

// Pochylony tekst
$str = preg_replace(\"#\[i\](.*?)\[/i\]#si\", \"\\1\", $str);

// Podkreślony tekst
$str = preg_replace(\"#\[u\](.*?)\[/u\]#si\", \"\\1\", $str);

// kolejny wiersz
$str=nl2br($str);

// js
$str = preg_replace_callback(\"#\<(.*?)javascript(.*?)\>#si\", \"bbcode_js\", $str);

// wynik
return $str;}



// anti js
Function bbcode_js($str){
if(!eregi('
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.