私のメソッドは文字列を解析し、文字列に含まれる情報を処理します。簡単な例は
$string=
"
user:name,password={$_POST['name']}, {$_POST['password']}(md5);
names:name=name;
";
$class->$method($string);
上記は 2 つの挿入ステートメントを実行します。1 つ目は、user という名前のテーブルに、md5 で暗号化されたユーザー名とパスワードを挿入します。
2 番目は名前テーブルに名前を挿入します。文字をエスケープできるように設定しています。つまり、ユーザー名が p;ez の場合です。文字列には p\;ez が含まれます。
私の現在の方法は次のとおりです
#get position of ;
$offsetSemi=stripos($s, ";");
#check if its escaped
if ($s[$offsetSemi-1]!='\\')
{
//not escaped
}
上記の方法の問題は、; の最初のインスタンスのみをチェックすることです。私が試した他の解決策は、; で文字列を爆発させることでした。ただし、エスケープされたものを含むすべてのインスタンスで爆発したため、これは機能しません。私が試したもう1つのことは、以下の正規表現で爆発することでした
/[^\\\];/
これに関する問題は、以前に文字で爆発したことです。エスケープされなかったすべてのインスタンスで。のすべてのインスタンスで文字列を爆発させる方法はありますか ; バックスラッシュが前に付いていない?