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
中的內容做任何假設都非常危險,因為該輸入在用戶的控制之下,而用戶可能並非你的朋友。