0

I'm sending a php script multiple urls (about 15) at once, all containing about 5 url variables. In my script, I'm parsing the chunk of urls into individual ones by splitting them with two backslashes (which i add upon before to the script), and then curling each individual url. However, when I run my script, it only accepts a url up to the "&" symbol. I'd like to have the entire chunk, so that I can split it up later in my script. What might be the best way to approach this issue?

Thanks.

An example of what happens when i send my script a url chunk:

 <?php
    /*
    $url variable being sent to script:
    http://www.test1.com?q1=a&q2=b&q3=c&q4=d\\http://www.test2.com?r1=a&r2=b&r3=c&r4=d\\http://www.test3.com?q1=a&q2=b&q3=c&q4=d\\http://www.test4.com?e1=a&e2=b&e3=c&e4=d
    */

    $url = $_GET['url'];

    echo $url; // returns http://www.test1.com?q1=a

    //later on in my script, i just need to curl each "\\" seperated url
    ?>
1
  • This looks very much like an issue with the encoding of the URL - how is this data getting onto the query string in the first place? Commented Nov 5, 2009 at 7:57

3 Answers 3

1

You need to urlencode() the (data) URLs before appending them to your script's request.

Otherwise, PHP is going to to see ?listOfUrls=http://someurl.com/?someVar=SomeVal& and stop right there, due to the literal "&"

If you're building the query string in PHP you could try something like:

<?PHP
//imagine $urls is an array of urls
$qs = '?urls=';
foreach($urls as $u){
    $q .= urlencode($u) .'\\';
}

I also suspect you can play with [] notation in the url so that on the other side of the GET, you get a nice clean array of URLs back, instead of having to parse on some delimiter like "\"

Sign up to request clarification or add additional context in comments.

Comments

0

Since you didn't url encode your url param, everything after the first & is treated as the param to the original url.

Comments

0

The $_GET array is formed by splitting on ampersands. URL-encode the URLs before passing them as parameters. PHP should decode them for you.

Example: pass url=http://www.test1.com?q1=a%26q2=b%26q3=c%26q4=d\\http://www.test2.com?r1=a%26r2=b%26r3=c%26r4=d\\http://www.test3.com?q1=a%26q2=b%26q3=c%26q4=d\\http://www.test4.com?e1=a%26e2=b%26e3=c%26e4=d

You can do away with the '\\' by turning the parameter into an array. Example: use url[]=http://www.test1.com?q1=a%26q2=b%26q3=c%26q4=d&url[]=http://www.test2.com?r1=a%26r2=b%26r3=c%26r4=d&url[]=http://www.test3.com?q1=a%26q2=b%26q3=c%26q4=d&url[]=http://www.test4.com?e1=a%26e2=b%26e3=c%26e4=d

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.