如何将变量附加到已经包含变量的url?

时间:2009-05-03 13:49:51

标签: php regex url

所以,我现在所处的情况有点复杂(对我而言),但我会尝试一下。

我想运行一段HTML并提取引用我自己的域的所有链接。接下来,我想用预定义的GET变量字符串附加这些URL。例如,我想将“?var1 = 2& var2 = 4”追加到“http://www.domain.com/page/”,从而创建“http://www.domain.com/page/?var1=2&var2=4”。

我目前正在应用的方法是一个简单的preg_replace函数(PHP),但这里有趣的时候。当他们最后已经有一些GET变量时,我如何创建有效的附加网址?例如,它可以创建一个这样的网址:'http://www.domain.com/page/?already=here&another=one?var1=2&var2=4' 从而打破了GET数据。

总而言之,我正在寻找的是一个可以应对这些场景的reg exp,创建我的扩展URL并将其写回HTML片段。

这是我到目前为止所做的:

$sHTML = preg_replace("'href=\"($domainURL.*?[\/$])\"'", 'href="\1' . $appendedTags . '"', $sHTML);

提前致谢

3 个答案:

答案 0 :(得分:4)

除了Elazar Leibovich建议的内容之外,我还会使用parse_str()解析查询字符串,根据需要修改生成的数组,然后使用http_build_query()重建查询字符串。这样,您的查询字符串中就不会有任何重复项,并且您不必为编写查询部分的网址编码而烦恼。

完整的示例将如下所示(扩充Elazar Leibovich代码):

$broken = parse_url($url);
$query = parse_str($broken['query']);
$query['var1'] = 1;
$query['var2'] = 2;
$broken['query'] = http_build_query($query);
return $broken['scheme'] . '://' . $broken['host'] . $broken['path'] .
  '?' . $broken['query'] . '#' . $broken['fragment'];

答案 1 :(得分:3)

正则表达不是解决方案,正如某人said

  有些人在面对的时候   问题,想想“我知道,我会用   正则表达式。“现在他们有   两个问题。

但请注意,我将使用的是parse_url,然后将var1=1&var2=2附加到结果查询字符串。有点像:

$broken = parse_url($url);
$broken['query'] .= '&var1=1&var2=2';
if (strpos($broken,'&')==0) $broken['query'] = substr($broken['query'],1);
return $broken['scheme'].'://'.$broken['host'].$broken['path'].
  '?'.$broken['query'].'#'.$broken['fragment'];

如果您不希望变量出现两次,请同时使用parse_str拆分查询字符串。

答案 2 :(得分:0)

此外,parse_str不会返回任何值,如答案所示,而是将数组作为参数:

$array = array();    
parse_str($url,$array);
// $array will contain the ["scheme"] ["host"] etc

只是旁注;)

- G