Autor | Zpráva | ||
---|---|---|---|
Fisak Profil |
#1 · Zasláno: 13. 1. 2012, 10:39:52 · Upravil/a: Fisak
Zdravím... dodnes jsem používal fci ereg_repleca (především na ochranu proti sql injekci) ale prý mám používat radši preg_replace. Prosím o radu jak šikovně přepsat všechny ereg_replace když je mam ve formátu:
ereg_replace('[^0-9\a-z\-\_\.]', '', $_POST["$soubor_pld"]); |
||
panther Profil |
Fisak:
preg_replace, co konkrétně jsi nepochopil? |
||
Fisak Profil |
#3 · Zasláno: 13. 1. 2012, 10:45:07
panther:
ten rozdíl zápisu '[^0-9\a-z\-\_\.]' |
||
Ugo Profil |
#4 · Zasláno: 13. 1. 2012, 10:52:03
víceméně jedinej rozdíl je v delimetrech http://us.php.net/manual/en/regexp.reference.delimiters.php čili kolem toho výrazu ještě přidáš např #
|
||
Tori Profil |
#5 · Zasláno: 13. 1. 2012, 11:00:42
Fisak:
Koukněte se případně na funkce filter_var a filter_input. Sice neumožňují* až tak restriktivní vyčistění řetězce, jaké v tomto případě chcete, ale mohly by se hodit. * = ne implicitně, jedině pomocí callback funkce. |
||
Fisak Profil |
#6 · Zasláno: 13. 1. 2012, 11:11:02
takže ereg_replace('#[^0-9\a-z\-\_\.]#', '', $_POST["$soubor_pld"]); by mělo být správně ??
|
||
Joker Profil |
#7 · Zasláno: 13. 1. 2012, 11:26:07
Fisak:
Jedna připomínka, proč píšete proměnnou do uvozovek? |
||
YoSarin Profil |
#8 · Zasláno: 13. 1. 2012, 11:44:01
Fisak:
preg_replace... A jak píše Joker - v "$promenna" jsou uvozovky dost nadbytečné... |
||
Fisak Profil |
#9 · Zasláno: 13. 1. 2012, 12:00:26 · Upravil/a: Fisak
YoSarin:
jo sry... preg_replace a vynecham uvozovky nevím proč ale stále mi při preg_replace('#[^a-z]#', '', $_POST["jazyk"]); hlásí chybu: Warning: preg_replace(): Compilation failed: missing terminating ] for character class at offset 15 in /home/users/insignia/insignia.funsite.cz/web/admin/php_modules/options/index.php on line 54 |
||
YoSarin Profil |
#10 · Zasláno: 13. 1. 2012, 12:28:29
Fisak:
A určitě to máš přesně tak jak se to tady zobrazuje? Není ta chyby na jiném řádku? Není tam navíc nějaké [? Není tam před ] zpětné lomítko? |
||
Fisak Profil |
#11 · Zasláno: 13. 1. 2012, 12:39:20 · Upravil/a: Fisak
<?php if(isset($_POST["zmenit"])) { //nastavení pluginů $slozka_u_pld = OpenDir ("plugins/usefull_plugins/"); while(false !== ($soubor_pld = ReadDir ($slozka_u_pld))) { if($soubor_pld != "." and $soubor_pld != ".." and $soubor_pld != "") { $form_soubor_pld=preg_replace('#[^0-9\a-z\-\_\.]#', '', $_POST[$soubor_pld]); if($str_pld=db_system("SELECT * FROM options where type = '$soubor_pld'")) { db_system("UPDATE options set text = '$form_soubor_pld' where type = '$soubor_pld'"); } else { db_system("insert into options (type, text) VALUES ('$soubor_pld', '$form_soubor_pld')"); } } } //nastavení js pluginů $slozka_js_plgo = OpenDir ("js/plugins/"); while(false !== ($soub_js_pl = ReadDir ($slozka_js_plgo))) { if($soub_js_pl != "." and $soub_js_pl != ".." and $soub_js_pl != "") { $form_soubor_jspl=preg_replace('#[^0-9\a-z\-\_\.]#', '', $_POST[$soub_js_pl]); if($str_js_pld=db_system("SELECT * FROM options where type = '$soub_js_pl'")) { db_system("UPDATE options set text = '$form_soubor_jspl' where type = '$soub_js_pl'"); } else { db_system("insert into options (type, text) VALUES ('$soub_js_pl', '$form_soubor_jspl')"); } } } //nastavení systému $vychozi_jazyk=preg_replace('#[^a-z]#', '', $_POST["jazyk"]); $mod_rewrite=preg_replace('#[^a-z]#', '', $_POST["mod_rewrite"]); $title=preg_replace('#[^0-9\a-záčďéěíňóřšťúůýž\ \-\_\.\,\*\@]#', '', $_POST["title"]); $nazev_webu=preg_replace('#[^0-9\a-záčďéěíňóřšťúůýž\ \-\_\.\,\*\@]#', '', $_POST["nazev_webu"]); $podnazev_webu=preg_replace('#[^0-9\a-záčďéěíňóřšťúůýž\ \-\_\.\,\*\@]#', '', $_POST["podnazev_webu"]); $vychozi_stranka=preg_replace('#[^0-9\a-z\-\_\]#', '', $_POST["vychozi_stranka"]); $author=preg_replace('#[^0-9\a-záčďéěíňóřšťúůýž\ \-\_\.\,\*\@]#', '', $_POST["author"]); $seo_description=preg_replace('#[^0-9\a-záčďéěíňóřšťúůýž\ \-\_\.\,\*\<\>\"\!\/\(\)\[\]\|\€\đ\Đ\ł\#\&\@\{\}\]#', '', $_POST["seo_description"]); $seo_keywords=preg_replace('#[^0-9\a-záčďéěíňóřšťúůýž\ \-\_\.\,\*\<\>\"\!\/\(\)\[\]\|\€\đ\Đ\ł\#\&\@\{\}\]#', '', $_POST["seo_keywords"]); $vzhled=preg_replace('#[^0-9\a-z\-\_\]#', '', $_POST["vzhled"]); $image_player=preg_replace('#[^0-9\a-z\-\_\]#', '', $_POST["image_player"]); $media_player=preg_replace('#[^0-9\a-z\-\_\]#', '', $_POST["media_player"]); $form_plugin=preg_replace('#[^0-9\a-z\-\_\]#', '', $_POST["form_plugin"]); $time_format=preg_replace('#[^0-9\a-z\-\_\:\ \.]#', '', $_POST["time_format"]); $date_format=preg_replace('#[^0-9\a-z\-\_\:\ \.]#', '', $_POST["date_format"]); $pagination=preg_replace('#[^0-9\a-z]#', '', $_POST["pagination"]); $num_pagination=preg_replace('#[^0-9]#', '', $_POST["num_pagination"]); ?> Warning: preg_replace(): Compilation failed: missing terminating ] for character class at offset 15 in /home/users/insignia/insignia.funsite.cz/web/admin/php_modules/options/index.php on line 54 Warning: preg_replace(): Compilation failed: missing terminating ] for character class at offset 96 in /home/users/insignia/insignia.funsite.cz/web/admin/php_modules/options/index.php on line 56 Warning: preg_replace(): Compilation failed: missing terminating ] for character class at offset 96 in /home/users/insignia/insignia.funsite.cz/web/admin/php_modules/options/index.php on line 57 Warning: preg_replace(): Compilation failed: missing terminating ] for character class at offset 15 in /home/users/insignia/insignia.funsite.cz/web/admin/php_modules/options/index.php on line 58 Warning: preg_replace(): Compilation failed: missing terminating ] for character class at offset 15 in /home/users/insignia/insignia.funsite.cz/web/admin/php_modules/options/index.php on line 59 Warning: preg_replace(): Compilation failed: missing terminating ] for character class at offset 15 in /home/users/insignia/insignia.funsite.cz/web/admin/php_modules/options/index.php on line 60 Warning: preg_replace(): Compilation failed: missing terminating ] for character class at offset 15 in /home/users/insignia/insignia.funsite.cz/web/admin/php_modules/options/index.php on line 61 ahaaa už sem na to přišel.. nesmí to končit \ tzn. ne takto '#[^0-9\a-z\-\_\]#' ale takto '#[^0-9\a-z\-\_]#' |
||
panther Profil |
#12 · Zasláno: 13. 1. 2012, 12:44:16
Fisak:
YoSarin v [#10] napsal: „Není tam před ] zpětné lomítko?“ Samozřejmě, že tam je. Ale proč sem nevložit celý kód, ať se podívá někdo jiný, že? Reguláry nejsou mojí nejsilnější stránkou, ale zdá se mi, že s těmi zpětnými lomítky zbytečně plýtváš, tolik jich tam snad třeba není, ne? |
||
Ugo Profil |
#13 · Zasláno: 13. 1. 2012, 13:02:44
Fisak:
ty reguláry sou ... zvláštní nicméně \ je escapujici znak, takže ho musíš escapovat taky (\\), ale obecně je jich tma opravdu hodně |
||
Fisak Profil |
#14 · Zasláno: 13. 1. 2012, 13:02:53
panther:
„tolik jich tam snad třeba není, ne?“ a jak by to tedy mělo vypadat ? |
||
YoSarin Profil |
#15 · Zasláno: 13. 1. 2012, 13:26:51 · Upravil/a: YoSarin
Fisak:
Ještě odbočím - uvažoval jsi co se stane s velkými písmeny? Tvůj regexp je smaže... Nemluvě o tom, že to bereš až moc konkrétně - není důvod aby se regexp pro název webu lišil od výrazu pro podnázev webu a titulek, ne? Myslím že na to by stačil jeden výraz... Navíc - používáš-li utf-8, tak diakritika ti v tom může nadělat pěkný brajgl, pokud nepoužiješ příslušný modifikátor. Koukni konkrétně na modifikátory i a u. Modifikátory se "přilepují" za koncové # (nebo jiný delimiter který si zvolíš): #[^0-9\a-záčďéěíňóřšťúůýž\ \-\_\.\,\*\@]#ui .
Možná zvaž co přesně od těch funkcí chceš - třeba by se ti daleko víc hodila nějaká nativní funkce místo regexpu... A možná bys ještě mohl zkusit otestovat jestli ti místo tohohle zdlouhavého vypisování neposlouží víc třída [:alnum:] |
||
Fisak Profil |
#16 · Zasláno: 13. 1. 2012, 13:40:07
dobře přidal sem tam ui... a uvažoval sem u fci např. preg($co_muze_obsahovat, $string) { return preg_replace('#[$co_muze_obsahovat]#ui', '', $string);
|
||
Marek88 Profil |
#17 · Zasláno: 13. 1. 2012, 13:41:15
|
||
YoSarin Profil |
#18 · Zasláno: 13. 1. 2012, 15:36:44
Fisak:
„a uvažoval sem u fci např. preg“ Jestli už jsi to přepsal z ereg do preg, tak tohle je zbytečné... Když jsem říkal "nativní funkce" měl jsem na mysli funkci která v PHP už je a možná by tvému účelu posloužila líp (jak psala už Tori). Ale to těžko říct - když nevíme co přesně vlastně mají ty fce za cíl... |
||
Časová prodleva: 12 let
|
0