Regular Extension pomoć

1

Regular Extension pomoć

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Treba mi pomoć oko Regex-a. Naime, malo se mučim oko dozvole/zabrane određenih karaktera i simbola.
Treba mi neka pomoć od iskusnijih kolega u ovom polju.
Hoću da profiltriram neke sadržaje i da dozvolim samo slova a-Z, brojeve 0-9 i simbole poput tačke, upitnika, uzvičnika, zareza, zagrada... samo te osnovne stvari:

  1. ( -+,.;?"!%:()/*' )


Drugi simboli mi ne trebaju. Kako to da uradim?
Hvala!



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 17 Jun 2012
  • Poruke: 727

Probaj ovaj tutorijal ako je to ono na sto si mislio: Tekst za link



offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Alien vs Predator ::Probaj ovaj tutorijal ako je to ono na sto si mislio: Tekst za link
Mhm... to je to... Muči me nešto, pokušavam da napravim kvalitetan filter za input form prilikom registracije i pretrage na jednom portalu jer predhodno su neki pokušavali da ubace svakakve HTML, PHP i javaskript pozive u bazu preko $_POST funkcija.

Predhodni programer nije ni razmišljao o takvim stvarima pa je napravio takav kod da si čak mogao umesto slike uploadovati bilo koji fajl, bilo koje ekstenzije. Užas.

Napravio sam filter od HTML, XML i PHP tagova ali nije mi to dovoljno jer može se običnim redoslednim ubacivanjem opet napraviti poziv. Zato sam hteo da ograničim i karakterno. Da dozvolim samo slova i brojeve i još po koji simbol za koji znam da neće škoditi.

Ima li neko rešenje za kvaliteto filtriranje ulaznih stringova?

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3760
  • Gde živiš: 127.0.0.1

Naravno da ima Wink

  1. $filtered = preg_replace("@([^a-zA-Z0-9\+\-_()*!,.;\?:'%/\"]+)@Ui", "", $not_filtered);

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Rastafarii ::Naravno da ima Wink

  1. $filtered = preg_replace("@([^a-zA-Z0-9\+\-_()*!,.;\?:'%/\"]+)@Ui", "", $not_filtered);

Hvala ti mnogo! Opet brzo kucaš! Smajli
  1. $filtered = preg_replace("@([^a-zA-Z0-9\+\-_()*!,.;\?:'%/\"]+)@Ui", "$1", $not_filtered);

Radi perfektno! Ziveli

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3760
  • Gde živiš: 127.0.0.1

Nope, ne kucam brzo. Ovaj put sam testirao Wink Evo i objasnjenja:

  1. $filtered = preg_replace("@([^a-zA-Z0-9\+\-_()*!,.;\?:'%/\"]+)@Ui", "", $not_filtered);

Ima sledece znacenje:
Citat:Zameni sve karaktere unutar promenljive $not_filtered koji NE pripadaju definisanom nizu nicim i rezultat smesti u promenljivu $filtered.
Tvoja izmena:
  1. $filtered = preg_replace("@([^a-zA-Z0-9\+\-_()*!,.;\?:'%/\"]+)@Ui", "$1", $not_filtered);

Ima sledece znacenje:
Citat:Zameni sve karaktere unutar promenljive $not_filtered koji NE pripadaju definisanom nizu samim sobom i rezultat smesti u promenljivu $filtered.
I u sustini se svodi na:
  1. $filtered = $not_filtered;

Evo i malog testa:
  1. $test = "test`~!@#$%^&*()_-+="; // trebalo bi da "prezivi" test!%*()_-+ (karakteri: `~@#$^&= nisu dozvoljeni)
  2. echo preg_replace("@([^a-zA-Z0-9\+\-_()*!,.;\?:'%/\"]+)@Ui", "$1", $test); // rezultat: test`~!@#$%^&*()_-+=
  3. echo preg_replace("@([^a-zA-Z0-9\+\-_()*!,.;\?:'%/\"]+)@Ui", "", $test); // rezultat: test!%*()_-+


Jesi li i dalje siguran da "brzo kucam"? Ziveli

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Upravu si, moja greška, izvini. Odličan je kod. Radi perfektno. Hvala ti!

offline
  • PHP programer
  • Pridružio: 26 Okt 2007
  • Poruke: 1064
  • Gde živiš: u Apache

Vidim da ovde dobro riplejsujete. Smile

Imam funkciju s kojom sprečavam da se sajt uruši ako neko unese single quote jedanput, single se unese u bazu ali se sačuva integritet sajta.

  1. function mysql_escape_mimic($inp) {
  2.     if(is_array($inp))
  3.         return array_map(__METHOD__, $inp);
  4.  
  5.     if(!empty($inp) && is_string($inp)) {
  6.         return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $inp);
  7.     }
  8.  
  9.     return $inp;
  10. }


Problem je ako neko unese npr. u blizini 'Kluza' znači single quote dvaput.

Idealno bi bilo da se navodnici zamene sa slovom ć i uopšte sva naša slova jer kad neko kuca npr., već a nije prebacio na našu tastaturu, sajt se sruši i iskoči syntax error zbog navodnika.

Ili, ako bi barem moglo da se single quote zameni sa double quote.

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3760
  • Gde živiš: 127.0.0.1

Za to ne moras da palis RegExp Wink Dovoljan ti je i addslashes() (posto je mysql_real_escape_string() deprecated od PHP 5.5).

  1. <?php
  2. $str = "Is your name O'reilly?";
  3.  
  4. // Outputs: Is your name O\'reilly?
  5. echo addslashes($str);
  6. ?>


Ili, u tvom slucaju:

  1. <?php
  2. $str = "u blizini 'Kluza'";
  3.  
  4. // Outputs: u blizini \'Kluza\'
  5. echo addslashes($str);
  6. ?>

offline
  • PHP programer
  • Pridružio: 26 Okt 2007
  • Poruke: 1064
  • Gde živiš: u Apache

ok hvala, razumeo sam te i znam za mysql escape itd.

Ali nije problem za taj jedan pojam koji je neko uneo, šta kad sledeći korisnik unese npr.,

u blizini 'Vukovog spomenika' pa bi onda trebalo npr.

  1. $str = " '.' ";
  2. echo addslashes($str);

Ko je trenutno na forumu
 

Ukupno su 856 korisnika na forumu :: 45 registrovanih, 1 sakriven i 810 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 5.56, 015, AndrejPetar, bozidar79, Bushek, dearg, dejanbenkovic, doktor097, Goran_, grenadir, Hardenberg, Hitri, HrcAk47, JankoS, jarovitt, Kalem, kuntalo, Manjane, milbos, MILJEVINAC, Milometer, Najax, nebidrag, Orc, Paklenica, panzerwaffe, Pegggio, Pero, precan, redstar011, Rothmans, ruma, stingD, Szigetwar, t84dar, tiho76, Trivo, Trpe Grozni, Vanderx, Viktor Petrenko, zeo, zmajognjeniivan, Zorge, zvomar, Đole64