0

私はphpを学んでいます。1つのphpページから別のページに2つの変数と2つの配列を投稿しようとしているコードがあります。受信ページは正常に機能しますが、最初のページは数文字後にデータをトリミングしています(最大長に達していないか、どこか近くにありません)-

ここで、$array_nameと$array_qtyは2つの動的配列です。echo$cが私が望むものを正確に提供することを確認しました。

 <?php
  $serialized_name=serialize($array_name);
  $serialized_qty=serialize($array_qty) ;
  $c="count=".$count ."&&Sum=" . $a . "&&serialized_name=". $serialized_name . "&&serialized_qty=". $serialized_qty;
  echo $c;
  ?>

エコー$cは私に与える-

 count=6&&Sum=45.91&&serialized_name=a:7:{i:0;s:7:"vanilla";i:1;s:7:"vanilla";i:2;s:21:"very berry strawberry";i:3;s:7:"vanilla";i:4;s:7:"vanilla";i:5;s:7:"vanilla";i:6;s:7:"vanilla";}&&serialized_qty=a:7:{i:0;s:1:"2";i:1;s:1:"1";i:2;s:1:"1";i:3;s:1:"1";i:4;s:1:"1";i:5;s:1:"3";i:6;s:1:"3";} 

ただし、これにより、$c=

 <p><a href="Checkout.php?<?php echo $c ?>" >Checkout</a> </p>

上記の行から取得したトリミングされた出力は-

http://localhost/myRestaurant/Checkout.php?count=6&&Sum=45.91&&serialized_name=a:7:{i:0;s:7:

私はこれを手に入れるべきだったと思います-

http://localhost/myRestaurant/Checkout.php?count=6&&Sum=45.91&&serialized_name=a:7:{i:0;s:7:%22vanilla%22;i:1;s:7:%22vanilla%22;i:2;s:21:%22very%20berry%20strawberry%22;i:3;s:7:%22vanilla%22;i:4;s:7:%22vanilla%22;i:5;s:7:%22vanilla%22;i:6;s:7:%22vanilla%22;}&&serialized_qty=a:7:{i:0;s:1:%222%22;i:1;s:1:%221%22;i:2;s:1:%221%22;i:3;s:1:%221%22;i:4;s:1:%221%22;i:5;s:1:%223%22;i:6;s:1:%223%22;}

getが最も安全な方法ではないことはわかっていますが、これでうまくいくはずです。私が間違っていることとそれを修正する方法についてのヒントはありがたいです。

4

2 に答える 2

3

引用符は属性を途中で終了します。引用符をエスケープします。

<?php echo htmlentities($c); ?>
于 2012-12-08T23:58:30.767 に答える
1

この種のショッピングカート製品にはPOSTを使用する必要がありますが、とにかく、配列からURLを作成するだけでは、任意のデータをシリアル化することはできません。データをエンコードする必要があります。そうしないと、データが破損します。特別な文字の。

エンコードに使用するだけです:

$serialized_name = base64_encode(serialize($array_name));
$serialized_qty = base64_encode(serialize($array_qty));

データを取得するには、Checkout.phpで反対の操作を行います。

$unserialized_name = unserialize(base64_decode($_GET["serialized_name"]));
$unserialized_qty = unserialize(base64_decode($_GET["serialized_qty"]));
于 2012-12-09T00:04:42.077 に答える