[php]preg /e modifier quotes probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023
Eerst even wat code... Ik spreek tenslotte beter PHP dan nederlants Nederlands.
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


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Wellicht heb je wat aan de reacties van Onno en crisp in dit topic: [rml][ PHP] andere manier van parse/efficientie?[/rml]

En dan dus met name de www.php.net/preg_replace_callback functie :)

[ Voor 18% gewijzigd door ACM op 30-05-2003 15:22 ]


Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023
ACM schreef op 30 May 2003 @ 15:21:
Wellicht heb je wat aan de reacties van Onno en crisp in dit topic: [rml][ PHP] andere manier van parse/efficientie?[/rml]

En dan dus met name de www.php.net/preg_replace_callback functie :)
Dat is inderdaad netter, maar omdat je in plaats van een string een array krijgt, moet je alsnog een wrapper bouwen. In ieder geval breekt dat niet mochten ze dat achterlijke behaviour eens corrigeren. :/ :|
In iedergeval bedankt.

Localhost, sweet localhost