php解析带有get请求的多个变量的URL

时间:2009-11-05 07:53:17

标签: php url parsing

我一次发送一个php脚本多个url(大约15个),全部包含大约5个url变量。在我的脚本中,我正在通过将两个反斜杠(我之前添加到脚本中)分成它们,然后将每个网址卷曲来将大块网址解析为单个网址。但是,当我运行我的脚本时,它只接受一个url直到“&”符号。我想拥有整个块,以便我可以稍后在我的脚本中拆分它。什么是解决这个问题的最佳方法?

感谢。

当我向脚本发送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
    ?>

3 个答案:

答案 0 :(得分:1)

在将(数据)网址附加到脚本的请求之前,您需要urlencode()。

否则,PHP将会看到?listOfUrls = http://someurl.com/?someVar=SomeVal&并停在那里,因为文字“&amp;”

如果您在PHP中构建查询字符串,可以尝试类似:

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

我还怀疑你可以在url中使用[]表示法,这样在GET的另一端,你会得到一个很好的干净的URL数组,而不必像“\”那样解析一些分隔符

答案 1 :(得分:0)

$ _GET数组是通过拆分&符号形成的。在将URL作为参数传递之前对URL进行URL编码。 PHP应该为你解码它们。

示例:传递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

您可以将参数转换为array来取消'\\'。示例:使用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

答案 2 :(得分:0)

由于你没有url编码你的url param,所以在第一个&amp;被视为原始网址的参数。

相关问题