假设我有这样的网址
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的论点太少。有什么建议吗?
答案 0 :(得分:5)
你有多个%登录该网址,sprintf会对其进行解析,并尝试为每个找到的'某些东西'分配参数,你应该转义网址编码的值。
答案 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
获取solr搜索引擎的网址查询时,我遇到了这个问题。我刚刚通过在字符串中的每个%
之前添加额外%
来转义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
之后的双倍%。