Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [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
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


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
nevt
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


1. Kicok co do użycia addslashes() - przecież linijkę wyżej jest strip_tags() - wiec dlaczego miałoby być niebezpieczne ? jeżeli dane lecą do bazy to jest jak najbardziej wskazane, byle nie zapomnieć o stripslashes() przy odczycie.
2. stal-sw co do strip_tags() -ja bym wywołał: strip_tags($txt, '<a>'); - i niepotrzebne byłoby potem mozolne odbudowywanie linków za pomocą przeg_replace()...
3. dzięki zaoszczędzeniu dwóch linijek z preg_replace() można teraz rozwiązać problem niepotrzebnych spacji nie pogarszając wydajności funkcji... zgodnie z propozycją Kicoka.

Ten post edytował nevt 24.02.2008, 22:43:37


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
Kicok
post
Post #4





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

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


Cytat
1. Kicok co do użycia addslashes() - przecież linijkę wyżej jest strip_tags() - wiec dlaczego miałoby być niebezpieczne ? jeżeli dane lecą do bazy to jest jak najbardziej wskazane, byle nie zapomnieć o stripslashes() przy odczycie.


Dlatego jest niebezpieczne, że jak napiszę `49 znaków i apostrof`, to addslashes zamieni mi to na `49 znaków, backslash, apostrof`. Później wordwrap wstawi spację po 50-tym znaku (czyli po backslash'u) i już mam niewyescape'owanego apostrofa ;]


addslashes umieszczone po wordwrap powinno być OK ;]

Ten post edytował Kicok 25.02.2008, 06:20:39


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
stal-sw
post
Post #5





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

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


Witam.
No prawie dziala.

Kicok
- w towim kodzik jest taki problem.
Np. wpisuje w formularzu:
"
jakis tekscik xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxx

www.abcz.pl

www.xyz.net
"
A niestety po przejsciu prze twoje funkcyjki kod wyglada tak:
"
  1. <?php
  2. jakis tekscik xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxx xxx
    xxxxxxxxxxxxxxxxx xxxxxxx
  3. <br />
  4. <br /><class="menu" href="http://www.abc z.pl
  5. <br />
  6. <br />www.xyz.net">:: LINK</a>
  7. ?>

Te BRy to oczywisce Entery wcisniete podczas wypelniania formularza.

Masz moze pomysl jak zmodyfikowac ten kod aby dzialal poprawnie ?

Z gory dzieki za pomoc


--------------------
Go to the top of the page
+Quote Post
Kicok
post
Post #6





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

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


Zamień ([^?]+) na ([^\\s?]+), bo gdzieś mi to wcieło ;]


--------------------
"Sumienie mam czyste, bo nieużywane."
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 Aktualny czas: 22.08.2025 - 01:09