0

urlencode と urldecode を使用して、変数を html フォームに渡します。

$info = 'tempId='.$rows['tempID'].'&tempType='.$rows['tempType'].'&dbId='.$rows['ID'];
echo '<input type="hidden" name="rank[]" value="'.urlencode($info).'" >';

$rows の内容は次のとおりです

array (size=4)
  'ID' => string '110' (length=3)
  'tempID' => string '1' (length=1)
  'tempType' => string 'temp_first' (length=10)
  'pageOrder' => string '0' (length=1)

だから $info は

tempId=1&tempType=temp_first&dbId=110

しかし、それをデコードすると、1 つのパラメーターが失われます。これはどのように可能ですか?

foreach (explode('&', urldecode($list[$i])) as $chunk) {
    $param = explode("=", $chunk);

    $tempId = urldecode($param[0]); // template id
    $tempType = urldecode($param[1]); // Template type
    $dbId = urldecode($param[2]); // database ID

    var_dump($param);

}

出力:

array (size=2)
  0 => string 'dbId' (length=4)
  1 => string '110' (length=3)

たとえば、temp_first の代わりに tempType と表示されているなど、配列内にあるべきではないものさえある場合があります。変数名だけ。

皆さんが私を助けてくれることを願っています

4

5 に答える 5

3

文字列を手動で展開して処理する必要はありません。次を使用できますparse_str()

parse_str(urldecode($list[$i]), $output);
var_dump($output);

出力します:

array
  'tempId' => string '1' (length=1)
  'tempType' => string 'temp_first' (length=10)
  'dbId' => string '110' (length=3)
于 2013-04-29T09:09:45.693 に答える
2

これを試して

  $result=array();
  foreach (explode('&', urldecode($list[$i])) as $chunk) {
     $param = explode("=", $chunk);
     $result[$param[0]]=$param[1];
  } 
  var_dump($result);
于 2013-04-29T09:06:04.910 に答える
0

すべてのコードをまとめてグループ化する代わりに、個別の vars に入れることから始めて、デバッグのためにコンテンツをエコーし​​ます。1 つの変数を失うと言っているからですが、表示される出力は変数の 1 つにすぎません。他の 2 つの var_dump は何ですか?

「=」の前と「=」の後の部分を出力するためvar_dump($param);、実際には出力が次のようになると予想されます。

array (size=2)
  0 => string 'tempId' (length=6)
  1 => string '1' (length=1)

array (size=2)
  0 => string 'tempType' (length=8)
  1 => string 'temp_first' (length=10)

array (size=2)
  0 => string 'dbId' (length=4)
  1 => string '110' (length=3)

デバッグ コード:

foreach ($list as $row) {
  echo 'Full row:: '. $row.'<br>';

  //if the data is comming via GET or POST, its already decoded and no need to do it again
  $split = explode('&', urldecode($row));

  foreach($split as $chunk) {
    echo 'Chunk:: '.$chunk.'<br>';

    $param = explode('=', $chunk);

    echo 'param name:: '.$param[0].'<br>';
    echo 'param value:: '.$param[1].'<br>';
  }
}
于 2013-04-29T09:08:33.123 に答える
0

これを試して結果を確認していただけますか (私は暗闇の中で手探りしています):

//change this <input type="hidden" name="rank[]" value="'.urlencode($info).'" > to
//<input type="hidden" name="urlargs" value="'.urlencode($info).'" >
$values = explode('&',urldecode($_POST['urlargs']));
$arguments = array();
foreach($values as $argument_set){
    $data = explode('=',$argument_set);
    $arguments[$data[0]] = $data[1];
}
var_dump($arguments);

問題は値の処理方法にあると思います

于 2013-04-29T09:07:15.510 に答える
0
$data=array();
foreach (explode('&', urldecode($list[$i])) as $chunk) {

    $param = explode("=", $chunk); //
    $data[$param[0]]=$param[1]

}
于 2013-04-29T09:07:43.517 に答える