Eerst even wat code... Ik spreek tenslotte beter PHP dan nederlants Nederlands.
Zoals je ziet voegt de preg /e modifier slashes toe voor de enkel- en dubbelquote, verder nergens. Die slashes worden vervolgens weggehaald bij de eval, omdat de string tussen enkel- of dubbelquotes zit. Er bijft dus altijd een slash staan: voor de enkelquote of voor de dubbelquote. Aangezien $ niet wordt geescaped, zal ik moeten werken met enkelquotes, en blijft dus de slash staan voor de dubbelquote. Nu kan ik in mijn functie zeer eenvoudig even str_replace('\"','"',$param) toevoegen, maar dat betekent dat voor iedere systeemfunctie die ik aan wil roepen ik een wrapper moet gaan schrijven. Is hier niet een betere methode voor?
PHP:
1
2
3
4
5
6
7
8
9
10
11
| <? function test($param) { echo $param . "\n"; // lekker complex... ;-) } preg_replace("/(.*)/e","test('\\1')","123"); // print 123 preg_replace("/(.*)/e","test('\\1')","a'b\"c"); // print a'b\"c preg_replace("/(.*)/e",'test("\1")',"a'b\"c"); // print a\'b"c preg_replace("/(.*)/e",'test("\1")','@#$%\/'); // print @#$%\/ ?> |
Zoals je ziet voegt de preg /e modifier slashes toe voor de enkel- en dubbelquote, verder nergens. Die slashes worden vervolgens weggehaald bij de eval, omdat de string tussen enkel- of dubbelquotes zit. Er bijft dus altijd een slash staan: voor de enkelquote of voor de dubbelquote. Aangezien $ niet wordt geescaped, zal ik moeten werken met enkelquotes, en blijft dus de slash staan voor de dubbelquote. Nu kan ik in mijn functie zeer eenvoudig even str_replace('\"','"',$param) toevoegen, maar dat betekent dat voor iedere systeemfunctie die ik aan wil roepen ik een wrapper moet gaan schrijven. Is hier niet een betere methode voor?
Localhost, sweet localhost