Zaten değişkenleri olan bir url değişkenleri eklemek nasıl?

3 Cevap php

Yani, şu anda olduğum durum (benim için yani) karmaşık bir wee biraz, ama ben bunu bir deneyin vereceğim.

Ben HTML parçacığını çalıştırın ve kendi etki atıfta tüm bağlantıları ayıklamak istiyorum. Sonraki GET vars önceden tanımlanmış bir dize ile bu URL eklemek istiyorum. Örneğin, ben '? Var1 = 2 & var2'ye = 4' http://www.domain.com/page/ 'böylece yaratma' http://www.domain.com/page/?var1=2&var2=4 'eklemek istiyorum.

The method I'm currently applying is a simple preg_replace function (PHP), but here is when it gets interesting. How do i create valid appended url's when they already have some GET vars at the end? For example, it could create a url like this: 'http://www.domain.com/page/?already=here&another=one?var1=2&var2=4' thus breaking the GET data.

Yani sonuçlandırmak için, ne arıyorum, bu senaryoların baş benim genişletilmiş url oluşturmak ve geri HTML pasajı bunu yazabilirsiniz belgeli exp.

Bu ben bugüne kadar ne var:

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

Şimdiden teşekkürler

3 Cevap

Elazar Leibovich önerilen ne ek olarak, ben sorgu dizesi yeniden inşa etmek için parse_str() , modify the resulting array to my needs and then use http_build_query() ile sorgu dizesini ayrıştırmak istiyorum. Bu şekilde sizin sorgu dizesi içinde herhangi çoğaltmaları olmaz ve url-kodlama sorgu-parçaları ile kendinizi rahatsız gerekmez.

Tam bir örnek daha sonra (Elazar Leibovich kod artırmada) gibi görünecektir:

$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'];

Regex çözüm değildir, birileri gibi said:

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

Ama boşver, ben kullanmak ne, parse_url, ve sonra sonuç sorgu dizesi benim var1=1&var2=2 append. Çizgisinde bir şey:

$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'];

Eğer değişken iki kez görünmesini istemiyorsanız, parse_str sorgu dizesi ayrı kırmak için de kullanabilirsiniz.

Daha ziyade bir parametre olarak bir dizi alır cevap gösterildiği gibi Ayrıca parse_str tüm değerleri dönmek olmaz:

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

sadece bir yan not ;)

- G