2010-11-04 21 views
6

Olası Çoğalt bir parametre ekleyin: çalıştığını,
Change single variable value in querystringphp bir url güncellemek/

i belirli bir URL'ye bir parametre eklemek veya güncellemek için bu işlevi bulunca parametresi eklenmesi gerekiyor, ancak parametre var ise değiştirmiyor - özür dilerim regex hakkında çok fazla bir şey bilmiyorum, lütfen bir göz atın:

i l = ingilizce ile addURLParameter ararsanız

http://www.mysite.com/showprofile.php?id=110&l=arabic 

i peşin

http://www.mysite.com/showprofile.php?id=110&l=arabic&l=english 

teşekkür alıyorum:

burada çalışmıyor ne bir örnek.

+0

İşlev bana uygun görünüyor. Değiştirmeye çalıştığınız bir parametreye örnek verebilir misiniz ve hangi sonucu alıyorsunuz? –

+0

@Bruce Alderman örnek teşekkür ekledi. –

+0

Neyin yanlış olduğundan emin değilim; Burada birkaç test yaptım ve hatayı yeniden üretemedim. Ne olursa olsun, normal ifadeleri anlamıyorsanız, en iyi çözüm olmayacaktır. Kodu korumanız gerektiğinde ne olur? –

cevap

18

Neden URL'lerle çalışmak için standart PHP işlevlerini kullanmıyoruz? O http_build_url fark etmedi Maalesef

function addURLParameter ($url, $paramName, $paramValue) { 
    $url_data = parse_url($url); 
    $params = array(); 
    parse_str($url_data['query'], $params); 
    $params[$paramName] = $paramValue; 
    $params_str = http_build_query($params); 
    return http_build_url($url, array('query' => $params_str)); 
} 

o sırada kendi build_url fonksiyonunu çevirelim PECL :-) olduğunu.

function addURLParameter($url, $paramName, $paramValue) { 
    $url_data = parse_url($url); 
    if(!isset($url_data["query"])) 
     $url_data["query"]=""; 

    $params = array(); 
    parse_str($url_data['query'], $params); 
    $params[$paramName] = $paramValue; 
    $url_data['query'] = http_build_query($params); 
    return build_url($url_data); 
} 


function build_url($url_data) { 
    $url=""; 
    if(isset($url_data['host'])) 
    { 
     $url .= $url_data['scheme'] . '://'; 
     if (isset($url_data['user'])) { 
      $url .= $url_data['user']; 
       if (isset($url_data['pass'])) { 
        $url .= ':' . $url_data['pass']; 
       } 
      $url .= '@'; 
     } 
     $url .= $url_data['host']; 
     if (isset($url_data['port'])) { 
      $url .= ':' . $url_data['port']; 
     } 
    } 
    $url .= $url_data['path']; 
    if (isset($url_data['query'])) { 
     $url .= '?' . $url_data['query']; 
    } 
    if (isset($url_data['fragment'])) { 
     $url .= '#' . $url_data['fragment']; 
    } 
    return $url; 
} 
+0

teşekkürler ama PECL –

+0

olmayan paylaşılan bir ev sahibiyim Hayır-PECL varyantı – Qwerty

+0

@Sherif eklendi. Cevabını güncelledi. +1, bu iyi (her ne kadar orijinal soruda olmalı ve çiftlikte, gelecek nesiller için olmasa da) –

İlgili konular