とを使用serialize()
しbase64_encode()
ます。
print '<input type="hidden" name="price_list" value="' . base64_encode(serialize($item_list)) . '">'
および: unserialize()
_base64_decode()
//Code on the second page for the foreach loop
$price_list = unserialize(base64_decode($_POST['price_list']));
foreach($price_list as $name=>$price) {
...
}
serialize()
配列を文字列に変換します。base64_encode()
この文字列をエンコードして、HTTP 経由で安全に送信できるようにします。それがなくても機能するかもしれませんが、安全側にいる方が良いでしょう. さらに、配列が少し難読化されます。
アップデート:
実際、文字列を含む配列をシリアル化すると、array('foo', 'bar')
たとえばa:2:{i:0;s:3:"foo";i:1;s:3:"bar";}
.
これを正しく挿入するに'value="' . serialized_value . '"'
は、エンコードする必要があります。そうしないと、結果が二重引用符で混乱します"
。
value="a:2:{i:0;s:3:"foo";i:1;s:3:"bar";}"
更新 2: Tom はセキュリティに関して適切な指摘を行いました。$_POST['price_list']
指定した値が に含まれていることを確認できません。攻撃者によって改ざんされる可能性があります。
データが有効であることを確認するために、ある種の秘密鍵を先頭に追加できます。
$secret_key = base64_encode('secret');
$value = $secret_key . base64_encode(serialize($item_list))
以降:
$value = $_POST['price_list'];
if(!substr($value,0,strlen($secret_key)) === $secret_key) {
echo "Attempted attack!!";
exit();
}
$price_list = unserialize(base64_decode(substr($value, strlen($secret_key)));
foreach($price_list as $name=>$price) {
...
}
もちろん、これはさらに改善することができますが、正しい考えを与えるはずです.