在URL中传递变量 - PHP

时间:2011-06-20 10:19:23

标签: php

假设我有这样的网址

http://subdomain.domain.com/folder1/abc?cat1=PTO2Cat2=HITOFF&u=%2Fnetahtml%2FPTO%2Fsearch-adv.htm&TEXT1=Value

在此URL中,最后的TEXT1会针对各种页面进行更改。但价值不会改变。所以它会像

第1页

http://subdomain.domain.com/folder1/abc?cat1=PTO2Cat2=HITOFF&u=%2Fnetahtml%2FPTO%2Fsearch-adv.htm&TEXT1=Value

第2页

http://subdomain.domain.com/folder1/abc?cat1=PTO2Cat2=HITOFF&u=%2Fnetahtml%2FPTO%2Fsearch-adv.htm&TEXT2=Value

对于Page n

http://subdomain.domain.com/folder1/abc?cat1=PTO2Cat2=HITOFF&u=%2Fnetahtml%2FPTO%2Fsearch-adv.htm&TEXTn=Value

我如何对其进行参数化?我试过这样的事情

for ($i=1;$i<=n;$i++)
{
$url = sprintf('http://subdomain.domain.com/folder1/abc?cat1=PTO2Cat2=HITOFF&u=%2Fnetahtml%2FPTO%2Fsearch-adv.htm&TEXT%d=Value',$i)
echo $url;
}

但它没有说Sprintf的论点太少。有什么建议吗?

5 个答案:

答案 0 :(得分:5)

你有多个%登录该网址,sprintf会对其进行解析,并尝试为每个找到的'某些东西'分配参数,你应该转义网址编码的值。

您可能需要查看:http://www.php.net/manual/en/function.sprintf.php

答案 1 :(得分:1)

只需使用urldecode,因为多个(附加)%会产生问题。

$url=urldecode('http://subdomain.domain.com/folder1/abc?cat1=PTO2Cat2=HITOFF&u=%2Fnetahtml%2FPTO%2Fsearch-adv.htm&TEXT%d=Value');
$url = sprintf($url,$i);

答案 2 :(得分:0)

$url = 'http://subdomain.domain.com/folder1/abc?cat1=PTO2Cat2=HITOFF&u=%2Fnetahtml%2FPTO%2Fsearch-adv.htm&TEXT'.$i.'=Value';

答案 3 :(得分:0)

您也可以使用普通字符串,而不是使用sprintf

 for ($i=1 ; $i < = n ; $i++ )
  {
    $url = "http://subdomain.domain.com/folder1/abc?cat1=PTO2Cat2=HITOFF&u=%2Fnetahtml%2FPTO%2Fsearch-adv.htm&TEXT".$i."=Value";
    echo $url;
 }

答案 4 :(得分:0)

使用file_get_contents获取搜索引擎的网址查询时,我遇到了这个问题。我刚刚通过在字符串中的每个%之前添加额外%来转义url编码字符串中的%百分号来解决它,如下所示:

$str = "%s?q=WebSite:%s&sort=Date%%20desc&version=2.2&start=%s&rows=%s&indent=on&wt=json";
        return sprintf($str, $this->url, $this->website, $this->start, $rows);

注意字符串中Date之后的双倍%。