P粉4492810682023-08-16 17:52:28
函数implode
的定义与下面的代码(这只是一个示例,未经测试)非常粗略地等效:
function not_really_implode($glue, $pieces) { $result = ''; $first = true; foreach ( $pieces as $piece ) { if ( ! $first ) { $result .= $glue; } $pieceAsString = (string)$piece; $result .= $pieceAsString; $first = false; } return $result; }
关键点在于这一行代码:$pieceAsString = (string)$piece;
- 为了组合数组的元素,implode
必须将每个元素都逐个转换为字符串。
现在考虑一下如果$pieces
看起来像这样:
$pieces = [ 'one', ['two-a', 'two-b'], 'three', ];
在我们的循环中的某个时刻,我们将有$piece = ['two-a', 'two-b']
,并尝试将其转换为字符串 - 糟糕!
因此,警告出现的原因是因为在你的$_REQUEST
数组中,存在其他数组。这可能发生的几种方式:
$_REQUEST
可以直接写入。例如,有人可以写入$_REQUEST['example'] = ['a', 'b'];
/your-page.php?example[]=a&example[]=b
,$_REQUEST
将自动填充为['a', 'b']
。这带来了一个非常重要的提醒:永远不要相信用户输入!对于$_REQUEST
中的内容做任何假设都非常危险,因为该输入在用户的控制之下,而用户可能并非你的朋友。