Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> flood i inne złośliwości użytkowników
Apo
post 7.03.2006, 21:31:21
Post #1





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


Witam
Chciałem w tym temacie abyście zamieszczali swoje rozwiązania dotyczące zabezpieczenia danych wprowadzanych z textarea. M. in
- umieszczanie długich wyrazów bez spacji co powoduje rozjeżdrzanie się grafiki
- dodawanie za dużo enterów co tworzy pustą przestrzeń
itd

Jako przykład zamieszcze tu swoją klase. Jest troche primitywna po pisana dawniej ale w jakimś tam stopniu spełnia swoje zadanie:

  1. <?php
  2. class filtr {
  3.  
  4.     public function zapis( $str, $ile = '' ) // filtrowanie danych przed zapisem
  5.     {
  6.     $str = nl2br(htmlspecialchars(trim($str)));
  7.     if(strlen($str) > 50) // włącza dzielenie długich słów jeśli tekst  jest dłuższy niż 50 znaków
  8.     $str = $this->long_words( $str );
  9.  
  10.         if($ile != '') { // opcjonalne skracanie danych
  11.         $str = substr($str, 0, $ile);
  12.         }
  13.         
  14.         if(!get_magic_quotes_gpc()) { // chyba nie trzeba komentować tongue.gif
  15.         $str = addslashes($str);
  16.         }
  17.  
  18.     return $str;
  19.     }
  20.     
  21.     public function odczyt( $str, $typ=1 ) // filtrowanie po odczytaniu danych + ewentualnie bbcode
  22.     {
  23.     $str = stripslashes($str);
  24.     
  25.     if($typ = 1)
  26.      {
  27.      $str = preg_replace('#\[b\](.*?)\[/b\]#si', '<b>\\1</b>', $str);
  28.      $str = preg_replace('#\[i\](.*?)\[/i\]#si', '<i>\\1</i>', $str);
  29.      $str = preg_replace('#\[u\](.*?)\[/u\]#si', '<u>\\1</u>', $str);
  30.      $str = preg_replace('#\[url\](.*?)\[/url\]#si', '<a href="\\1" target="_blank">\\1</a>', $str);
  31.      $str = preg_replace('#\[url=(.*?)\](.*?)\[/url\]#si', '<a href="\\1" target="_blank">\\2</a>', $str);
  32.      $str = preg_replace('#\[color=(.*?)\](.*?)\[/color\]#si', '<span style="color: \\1">\\2</span>', $str);
  33.      }
  34.     return $str;
  35.     }
  36.     
  37.     private function long_words( $str ) // dzielenie długich słów
  38.     {
  39.     $tab = explode(' ', $str);
  40.     $str = '';
  41.     foreach($tab as $wyraz)
  42.      {
  43.       if(strlen($wyraz) > 60)
  44.       {
  45.       $wyraz = wordwrap($wyraz, 10, ' ', 1); // dzieli na spacje co 10 znaków
  46.       $str .= wordwrap($wyraz, 60, '<br />', 1); // załamuje słowa powyżej 60 znaków
  47.       }
  48.         else
  49.         {
  50.         $str .= $wyraz;
  51.         }
  52.      }
  53.     return $str;
  54.     }
  55. }
  56. ?>


Niestety moja klasa nie spełnia wszystkich warunków. Bo co jeśli w tekst przykładowo wygląda przed zapisem tak:
  1. <?php
  2. ssssssssssssssssssssssssssssssssssssssss            dddddddddddddddddddddddddddd
    dddddd           
  3. asdsssssssssssssssssssssssssssssssssssssssssssssssssssssss sssssssssssssss
  4. ?>

Skrypt sobie nie daje z nim rady, jak również z pustymi polami '\n'.

Ten post edytował Apo 7.03.2006, 21:43:08
Go to the top of the page
+Quote Post
Kuziu
post 7.03.2006, 22:08:51
Post #2





Grupa: Zarejestrowani
Postów: 743
Pomógł: 0
Dołączył: 11.11.2003
Skąd: Toruń

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


Do jedengo z problemów wordwrap()


--------------------
Słońce zachodzi ... kolejna noc nadchodzi ...
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: 15.06.2025 - 23:39