phpurlencodeurldecode

urldecode losses 1 parameter


I'm using urlencode & urldecode to pass variables through a html-form.

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

Here is what is in $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)

So $info is

tempId=1&tempType=temp_first&dbId=110

But if I then decode it, it losses 1 parameter. How is this possible?

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);
    
}

Output:

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

Sometime there are even things in the array which should not be in there, for example instead of temp_first it says tempType. Just the variable name.

I hope you guys can help me


Solution

  • There's no need to explode and process the string manually, you can use parse_str():

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

    Would output:

    array
      'tempId' => string '1' (length=1)
      'tempType' => string 'temp_first' (length=10)
      'dbId' => string '110' (length=3)