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:
<?php
class filtr {
public function zapis( $str, $ile = '' ) // filtrowanie danych przed zapisem
{
if(strlen($str) > 50) // włącza dzielenie długich słów jeśli tekst jest dłuższy niż 50 znaków $str = $this->long_words( $str );
if($ile != '') { // opcjonalne skracanie danych
}
}
return $str;
}
public function odczyt( $str, $typ=1 ) // filtrowanie po odczytaniu danych + ewentualnie bbcode
{
if($typ = 1)
{
$str = preg_replace('#\[b\](.*?)\[/b\]#si', '<b>\\1</b>', $str); $str = preg_replace('#\[i\](.*?)\[/i\]#si', '<i>\\1</i>', $str); $str = preg_replace('#\[u\](.*?)\[/u\]#si', '<u>\\1</u>', $str); $str = preg_replace('#\[url\](.*?)\[/url\]#si', '<a href="\\1" target="_blank">\\1</a>', $str); $str = preg_replace('#\[url=(.*?)\](.*?)\[/url\]#si', '<a href="\\1" target="_blank">\\2</a>', $str); $str = preg_replace('#\[color=(.*?)\](.*?)\[/color\]#si', '<span style="color: \\1">\\2</span>', $str); }
return $str;
}
private function long_words( $str ) // dzielenie długich słów
{
$str = '';
foreach($tab as $wyraz)
{
{
$wyraz = wordwrap($wyraz, 10, ' ', 1
); // dzieli na spacje co 10 znaków $str .= wordwrap($wyraz, 60, '<br />', 1
); // załamuje słowa powyżej 60 znaków }
else
{
$str .= $wyraz;
}
}
return $str;
}
}
?>
Niestety moja klasa nie spełnia wszystkich warunków. Bo co jeśli w tekst przykładowo wygląda przed zapisem tak:
<?php
ssssssssssssssssssssssssssssssssssssssss dddddddddddddddddddddddddddd
dddddd
asdsssssssssssssssssssssssssssssssssssssssssssssssssssssss sssssssssssssss
?>
Skrypt sobie nie daje z nim rady, jak również z pustymi polami '\n'.
Ten post edytował Apo 7.03.2006, 21:43:08