ネストされた配列のレベルがいくつあっても、引数を取り、見つかったすべての文字列で引用符をエスケープするphpスクリプトを作成する方法。
私はこのようなことを試みました
$FileName = preg_replace("/'/", '', $UserInput);
しかし、私は文字列を置き換えたくありません
ネストされた配列のレベルがいくつあっても、引数を取り、見つかったすべての文字列で引用符をエスケープするphpスクリプトを作成する方法。
私はこのようなことを試みました
$FileName = preg_replace("/'/", '', $UserInput);
しかし、私は文字列を置き換えたくありません
function recAddslashes($var){
return is_array($var) ? array_map(__FUNCTION__, $var) : addcslashes($var, "'");
}
(を参照addcslashes
)
テストされていませんが、トリックを実行する必要があります:
function escape_single_quotes( $arg ){
if( is_array( $arg ) ){
foreach( $arg as &$k ){
$k = escape_single_quotes( $k );
}
}else{
$arg = str_replace("'","\'", $arg);
}
return $arg;
}
ファイル名を安全にしたい場合は、ホワイトリストアプローチを採用し、特定の文字のみを許可することができます。
$Filename = preg_replace('/[^A-Za-z0-9_\-]/', '_', $userInput);
上記の正規表現は、文字、数字、ダッシュ、またはアンダースコア以外の文字を置き換えます。許可されていない文字はすべてアンダースコアに置き換えられます。ホワイトリスト(「安全な」文字の小さなリストを許可する)は、ブラックリスト(「安全でない」文字の長いリストを禁止する)よりもはるかに安全です。私の最初の仮定は、ユーザーがサーバー上のファイルの名前を指定できるようにすることです。ただし、SQLインジェクションを防ぐためにこのアプローチを使用している場合は、間違いなく間違った道を進んでいます。プリペアドステートメントは、SQLインジェクションからデータベースを保護するための唯一の推奨される方法です。
各配列をループしてループする再帰関数を作成する必要があります。これは、置き換えられる配列ではなく、'
エコーしてから、次の配列に再度ループします。
function traverseArray($array)
{
// Loops through each element. If element again is array, function is recalled. If not, result is echoed.
foreach($array as $key=>$value)
{
if(is_array($value))
{
traverseArray($value);
}else{
$FileName = preg_replace("/'/", '', $value);
echo $FileName;
}
}
}