Jenny Moniz
Jenny Moniz

Reputation: 25

Why is the string length showing up in the URL?

I am trying to pass an array through a url. I have tried encoding the URL, serializing the URL, serializing and encoding the URL, and no matter what I do, the length of the strings is coming up in the url.

For example, if I pass the array through a URL this way:

<a href='http://splitsum.com/samples/your_store/checkout_form2.php?arr=<?PHP echo serialize($order); ?>'>Next Page</a>

The resulting URL looks like this (with the string count printed out):

.....s:15:%22shipping_method%22;s:20:%22Flat%20Rate%20(Best%20Way)%22;.....

Does anyone know why this is happening? I can var_dump the entire array (and see the string counts on the page) but I cant seem to print individual values in the array. Could it have something to do with a problem in the URL and the printing of the string length?

Thanks!

Upvotes: 1

Views: 59

Answers (2)

gen_Eric
gen_Eric

Reputation: 227280

The length is appearing because you're using serialize. That how it outputs. It's used to store a PHP variable, so that it can be loaded back into PHP again. It's output format contains the length of arrays/strings.

This is the wrong tool for this job. You want to use http_build_query here instead.

<a href='http://splitsum.com/samples/your_store/checkout_form2.php?<?PHP echo http_build_query(array('arr' => $order)); ?>'>Next Page</a>

Then $_GET['arr'] in checkout_form2.php will be your $order array.

Upvotes: 0

Marc B
Marc B

Reputation: 360762

Because you're using serialize(). You should be using urlencode() instead.

serialize is intended to take internal arbitrary data structures, and encode them into a portable format for re-use in a PHP system somewhere else. It does NOT produce code that is guaranteed valid in a URL context. Basically you're using a hammer to pound in a screw. Use a screwdriver instead.

Note that urlencode will not accept an array. Perhaps http_build_query() would be more appropriate

Upvotes: 3

Related Questions