在下面的脚本函数中,clean($ data)在其中调用它,我理解但它是如何清除语句 $ data [clean($ key)] = clean($ value); < /强> ???任何帮助表示赞赏..我正在努力解决这个问题,因为我是PHP的新手。问候。
if (ini_get('magic_quotes_gpc')) {
function clean($data) {
if (is_array($data)) {
foreach ($data as $key => $value) {
$data[clean($key)] = clean($value);
}
} else {
$data = stripslashes($data);
}
return $data;
}
$_GET = clean($_GET);
$_POST = clean($_POST);
$_REQUEST = clean($_REQUEST);
$_COOKIE = clean($_COOKIE);
}
答案 0 :(得分:1)
您的问题:
因此,如果我正确地记录你想知道行中的功能是什么
$data[clean($key)] = clean($value);
答案:
看到该函数的主要目的是使用php的stripslashes方法从字符串中删除斜杠。
如果输入项是一个数组,那么它会尝试通过调用键和值来清理数组的键以及数组的值。
在php数组中就像哈希映射一样,你可以使用foreach循环遍历键和值,如下所示
foreach ($data as $key => $value) {....}
因此,如果您想在代码段中总结算法,那么它将在
下面答案 1 :(得分:0)
根据我的理解,它不会清理密钥,但会在未清洁的密钥保留的情况下创建一个带有干净密钥的新元素。
$ a [&#39; foo \ bar&#39;]:val \ ue
变为
$ a [&#39; foo \ bar&#39;]:val \ ue
$ a [&#39; foobar&#39;]:值
如果我错了,有人会纠正我。
答案 2 :(得分:0)
如果采用这种方式,也许你会更好地理解代码:
foreach ($data as $key => $value) {
$key = clean($key); // Clean the key, the
$value = clean($value); // Clean the value
$data[$key] = $value; // Put it in the array that will be returned
}
假设您有一个这样的数组: $ _POST = array(0 =&gt;'foo',1 =&gt; array('bar'=&gt;'baz')); 将发生以下情况:
Call clean($_POST);
call clean 0
call clean 'foo'
$return[0] = 'foo'
call clean 1
call clean 'bar'
call clean 'baz'
$return[1] = array('bar' => 'baz');
你应该读这个:http://www.codewalkers.com/c/a/Miscellaneous/Recursion-in-PHP/
答案 3 :(得分:0)
该函数的主要目的是清理关联数组或单个变量。关联数组是一个数组,您可以在其中为该键定义键和值; PHP中使用的特殊数组也是如此$_GET
$_POST
等等。
“清理”的含义是检查魔术引号是否处于活动状态 - 这会导致在将动态数据发布到PHP页面时使用反斜杠转义这些数组中的某些字符。
$_GET["Scarlett"] = "O' Hara"
变为魔术引号$_GET["Scarlett"] = "O\' Hara"
因此,如果魔术引号处于活动状态,则该函数会处理此问题,并且会删除斜杠,以便字符串保留其正确的,而不是转义的值。
该算法检查传递给函数的数据是否为数组,如果不是,则直接清除该值。
$string = "Escapes\'in\'a string";
clean($string);
是一个数组吗?不。然后返回stripslashes(我的数据)
$ array = array(“key \”with \'escapes“=&gt;”value \“with \'escapes”,“another \'key”=&gt;“another value”); 清洁($阵列)
是一个数组吗?是。因此,使用foreach
遍历每个键/值对,取出键并像第一个示例一样清理它;然后获取值并执行相同操作并将清理后的版本放入数组中。
如您所见,该函数有两个不同的行为,这些行为由“if”语句区分。 如果传递一个数组,则激活第二个行为,该行为依次传递 strings ,而不是数组,从而触发第一个行为。
我的想法是,这个功能无法正常工作。任何人都有同样的感觉?我还没有测试它,但它似乎并没有“清理”替换它们的意义上的键/值,但添加清理后的版本沿着未清理的版本。