| 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: 15 let
|
|||
0