1

$_POSTから取得した後に何も返さないUnserializeに問題があります。フォームから単純な配列を投稿すると、シリアル化された文字列に二重引用符が追加されていることがわかりました。シリアル化する前とシリアル化解除する前にストリップスラッシュを試しましたが、結果は同じで出力はありません。php.iniでmagic_quotes_gpcを無効にしましたが、運がありません。「\」を手動で追加してunserializeの値をハードコーディングすると、目的の文字列が得られたので、addslashesを試してみましたが、何も残されていませんでした。これを解決するのを手伝ってください。

<?php


$tmp = $_POST["strVid"];

$myNewArray = unserialize($trp);
print_r($myNewArray);

$myArray = array('key1'=>'value1', 'key2'=>'value2');
$serialized = serialize($myArray);
?>

<form  onsubmit="return validate(this)" action="test_serialize.php" method="post">
<input type="hidden" name="strVid1" value="this is mega shit"/>
<input type="hidden" name="strVid" value="<?php echo $serialized; ?>">
<input type="Submit" name="next" value="Next"/>

</form>

更新しました...

シリアル化後:a:2:{s:4: "key1"; s:6: "value1"; s:4: "key2"; s:6: "value2";}

シリアル化のストリップスラッシュの後:a:2:{s:4: "key1"; s:6: "value1"; s:4: "key2"; s:6: "value2";}

\を手動で追加すると

$ myNewArray = unserialize( "a:2:{s:4:\" key1 \ "; s:6:\" value1 \ "; s:4:\" key2 \ "; s:6:\" value2 \ " ;} ");

出力を配列として取得します([key1] => value1 [key2] => value2)

ありがとう

4

3 に答える 3

3

あなたのコードで:

<input type="hidden" name="strVid" value="<?php echo $serialized; ?>">

変数には二重引用符が含まれるため、これは間違いなく間違っています。あなたはそれらをエスケープする必要があります:

<input type="hidden" name="strVid" value="<?php echo htmlspecialchars($serialized, ENT_QUOTES, 'UTF-8'); ?>">

ところで、これは、これを非シリアル化するためにこれを行っていると仮定しています:

$myNewArray = unserialize($_POST["strVid"]);
于 2012-06-05T18:14:57.837 に答える
0

シリアル化された入力でurlencodeを使用してみましたか?

http://php.net/manual/en/function.urlencode.php

于 2012-06-05T18:12:24.577 に答える
0

これはタイプミスですか?

$tmp = $_POST["strVid"];

$myNewArray = unserialize($trp);

$trp!=$tmp

于 2012-06-05T17:49:19.437 に答える