我正在尝试在PHP文档中使用stripslashes_deep函数作为方法,但是当我将它传递给数组时,它不起作用。但是,它确实可以使用字符串。任何人都可以指出为什么它可能无法正常工作?魔术引号是因为我正在测试这种可能性,但就像我说的那样,它适用于字符串而且我也没有测试$ _POST或$ _GET数据。这是代码:
protected function stripslashes_deep($input){
return is_array($input) ? array_map($this->stripslashes_deep, $input) : stripslashes($input);
}
字符串'O \'Reilly'转换为'O'Reilly',但下面的数组保持不变:
数组([0] =>数组([userId] => 23 [0] => 23 [用户名] => O \'Reilly [1] => O \'Reilly [userFirstName] => Bill [2] => Bill [userLastName] => O \'Reilly [3] => O \'Reilly))
非常感谢任何帮助。
编辑:
数组来自数据库并且有斜杠,因为PDO对象插入了绑定参数。我扩展了PDO,我试图在获取数组时自动去除斜杠,所以我不必每次输出数据时调用stripslashes。如果有人知道更好的方法,我肯定会接受建议。我没有看到任何一种针对PDO的非引用方法。
答案 0 :(得分:7)
array_map($this->stripslashes_deep, $input) : stripslashes($input);
应该是:
array_map(array($this, 'stripslashes_deep'), $input) : stripslashes($input);
如果你打算撤消魔法引号,你不应该以递归的方式实现它,因为它有一些性能和安全问题。请参阅:http://talks.php.net/show/php-best-practices/26