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 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 回答
0

如果您想让文件名安全,您可以采用白名单方法并且只允许某些字符:

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

上面的正则表达式将替换任何不是字母、数字、破折号或下划线的字符。任何不允许的字符都将替换为下划线。白名单(允许一小部分“安全”字符)比黑名单(不允许一长串“不安全”字符)安全得多。我的第一个假设是您允许用户在您的服务器上指定文件的名称。但是,如果您使用这种方法来防范 SQL 注入,那么您肯定走错了路。准备好的语句是保护数据库免受 SQL 注入的唯一推荐方法。

于 2013-01-25T20:08:58.393 回答
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 回答