Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]funkjca weryfikujaca dane z formularza - problem
stal-sw
post
Post #1





Grupa: Zarejestrowani
Postów: 176
Pomógł: 0
Dołączył: 27.06.2002
Skąd: Stalowa Wola

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


Witam.
Ponizej mam funkcje, przez ktora przepuszczam wszytkie dane z formularzy TEXTAREA.
Najwazniejsze w nije ejst to ze kroi dlugie wyrazy (powyzej 50 znakow). I tutaj jest duzy problem, z czescia mojej funkcji, gdzie jest wykrywany i tworzony LINK.
Mianowice jak link jest dluzszy niz te 50 znakow to niestety ale adres strony (LINK) bedzie uciety - a dokladnie po 50 znakach ebdzie wstawiona spacja.
Jak sobei z tym oradzic aby linki nie byly obcinane, a reszta slow byla przycinana do dlugosci 50 znakow (przycinana czyli po 50 znakach bedzie postawiona SPACJA a po niej oczywcie ebdzi dlasza czesc slowa). ?

Z gory dzieki za pomoc.

  1. <?
  2. function verify_form($txt){
  3. $txt = strip_tags($txt); //usuwa tagi
  4. $txt = addslashes($txt);
  5. $txt = trim($txt); 
  6. $txt = wordwrap($txt, 50, " ", 1);  //kroi długie wyrazy
  7. $txt = preg_replace("/([w.]+@[w]+.[w.]+)/i","<a class=menu href=\"mailto:$1\" >$1</a>",$txt);
  8. $txt = preg_replace("/((http(s?)://)|(www.))([S]+.[S]+)/i","<a class=menu href=\"http$3://$4$5\" >&raquo; LINK</a>",$txt);
  9. $txt = substr($txt,0,3550); //max limit dlugosci tekstu
  10.  
  11. $txt = nl2br($txt); 
  12.  
  13. return $txt;
  14. }
  15. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


W takim przypadku trzeba użyć wyrażeń regularnych do wstawiania spacji:
  1. <?php
  2.  
  3. $text = 'aaaaaaaaaaaaaaaaaaaaaaaaa(25) bbbbbbbbbbbbbbbbbbbb(20) ccccc(5) dddddddddddddddd(16) eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee(50) <br />
  4.  ht_tp://subdomena.domena.com.pl/direcotry1/direcotory2/some_file.php?var1=val1&var2=val2&amp;var3=val3 <br />
  5.  www.subdomena.domena.com.pl/direcotry1/direcotory2/some_file.php?var1=val1&var2=val2&amp;var3=val3';
  6.  
  7.  
  8. function wrap( $matches )
  9. {
  10. if( !empty( $matches[1] ) ) {
  11. // URL
  12. return $matches[1];
  13. }
  14.  
  15. return wordwrap( $matches[2], 20, " ", true );
  16. }
  17.  
  18. function createLink( $matches )
  19. {
  20. $url = empty( $matches[2] ) ? "http://" . $matches[1] : $matches[1];
  21. $url .= $matches[4];
  22. $url .= !empty( $matches[5] ) ? preg_replace( "#&(?!amp;?)#i", "&amp;", $matches[5] ) : "";
  23.  
  24. return "<a class=\"menu\" href=\"{$url}\">&raquo; LINK</a>";
  25. }
  26.  
  27. $text = preg_replace_callback( "#(((?:https?|ftp)://)|(www.))([^?]+)(?(?:S+))?#i","createLink", $text );
  28. $text = preg_replace_callback( "#(<a.*?>.*?</a>)|((?:^|s)S{21,})#", "wrap", $text );
  29.  
  30. echo $text;
  31.  
  32. ?>


Jeśli chcesz, żeby najdłuższe słowo mogło mieć 50 znaków, to zamień 20 w funkcji wordwrap oraz 21 w wyrażeniu regularnym na odpowiednio 50 i 51.



PS1. Zamień sobie "ht_tp" na "http", bo forum rozwalało mi kod.

PS2. Jeśli chcesz w ten sposób przetworzony tekst wyświetlić na ekranie, to nie używaj addslashes" title="Zobacz w manualu PHP" target="_manual. A jeśli powędruje on do bazy danych, to takie użycie addslashes" title="Zobacz w manualu PHP" target="_manual jakie można znaleźć w twoim kodzie stwarza zagrożenie atakiem SQL Injection.

Ten post edytował Kicok 24.02.2008, 22:14:44
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 17:45