0

ネストされた配列のレベルがいくつあっても、引数を取り、見つかったすべての文字列で引用符をエスケープするphpスクリプトを作成する方法。

私はこのようなことを試みました

$FileName = preg_replace("/'/", '', $UserInput); 

しかし、私は文字列を置き換えたくありません

4

4 に答える 4

1
function recAddslashes($var){
  return is_array($var) ? array_map(__FUNCTION__, $var) : addcslashes($var, "'");
}

(を参照addcslashes

于 2013-01-25T20:08:07.290 に答える
0

テストされていませんが、トリックを実行する必要があります:

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; 

}
于 2013-01-25T20:08:24.260 に答える
0

ファイル名を安全にしたい場合は、ホワイトリストアプローチを採用し、特定の文字のみを許可することができます。

$Filename = preg_replace('/[^A-Za-z0-9_\-]/', '_', $userInput);

上記の正規表現は、文字、数字、ダッシュ、またはアンダースコア以外の文字を置き換えます。許可されていない文字はすべてアンダースコアに置き換えられます。ホワイトリスト(「安全な」文字の小さなリストを許可する)は、ブラックリスト(「安全でない」文字の長いリストを禁止する)よりもはるかに安全です。私の最初の仮定は、ユーザーがサーバー上のファイルの名前を指定できるようにすることです。ただし、SQLインジェクションを防ぐためにこのアプローチを使用している場合は、間違いなく間違った道を進んでいます。プリペアドステートメントは、SQLインジェクションからデータベースを保護するための唯一の推奨される方法です。

于 2013-01-25T20:08:58.393 に答える
0

各配列をループしてループする再帰関数を作成する必要があります。これは、置き換えられる配列ではなく、'エコーしてから、次の配列に再度ループします。

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;
       }
    }
 }
于 2013-01-25T20:13:55.097 に答える