所以,我现在所处的情况有点复杂(对我而言),但我会尝试一下。
我想运行一段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);
提前致谢
答案 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