2016-09-03 2 views
1

Ich habe ein Saiten-Teil einer Zeichenfolge, die ein bestimmtes Muster passt

vessel_type='##some_key##' AND vessel_name= '##other_key##' 

ich es will mit-

vessel_type='{$_POST['some_key']}' AND vessel_name='{$_POST['other_key']}' 

Diese some_key und other_key ersetzt werden kann jede beliebige Text sein. Wie mache ich das? Etwas wie preg_replace() kann helfen?

Danke.

+0

Ja, so etwas wie 'preg_replace' helfen kann. –

+0

Ihr Code ist anfällig für SQL-Injection: http://php.net/manual/en/security.database.sql-injection.php – Toto

Antwort

0

Lösung mit preg_replace_callback:

$_POST['pew'] = 'LOL!'; 
$str = 'i said ##pew##'; 
var_dump(preg_replace_callback('/##(\w+)##/', function($v) { return $_POST[$v[1]]; }, $str)); 
// string(11) "i said LOL!" 
+0

Danke, aber was passiert, wenn ich nicht die 'pew'-Taste? – mukto90

+0

Und was weißt du dann? –

0

Sie können eine Erfassungsgruppe von ## auf beiden Seiten umgeben verwenden:

$re = '/##([^#]+)##/'; 
$str = "vessel_type='##some_key##' AND vessel_name= '##other_key##'"; 
$subst = '{$_POST["$1"]}'; 

$result = preg_replace($re, $subst, $str); 

//=> vessel_type='{$_POST["some_key"]}' AND vessel_name= '{$_POST["other_key"]}' 

RegEx Demo

+0

@ mukto90: Hat das geklappt? – anubhava

Verwandte Themen