Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: flood i inne złośliwości użytkowników
Forum PHP.pl > Forum > PHP
Apo
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'.
Kuziu
Do jedengo z problemów wordwrap()
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.