2009
10.04

Ciekawe jak dużo osób ma podobny problem jak ja. Brak odpowiednich wbudowanych w PHP funkcji do obsługi adresów URL. Dodawanie każdego parametru ręcznie zastanawiając się czy wcześniej nie został rozpoczęty „query string” itp. jest dosyć czasochłonne na dłuższą metę. Postanowiłem coś na ten przykry fakt zaradzić i napisałem 4, bardzo przydatne do obsługi adresów URL, funkcje.

Funkcja explodeURL „rozbija” podany adres URL na adres dokumentu oraz tablicę parametrów zawartych w „query string”.

function explodeURL($url){
/*
@author: Raisen
@site: http://www.raisen.pl/
@e-mail: kontakt[at]raisen[dot-here]pl
*/

      if(strpos($url,'?')===false)
            return array('url'=>$url);
      $exp1=explode('?',$url);
      if(count($exp1)>2)
            return false;
      if(strlen($exp1[1])==0)
            return array('url'=>$exp1[0]);
      $exp2=explode('&',$exp1[1]);
      foreach($exp2 as $v){
            $t=explode('=',$v);
            if(strlen($t[0])>0)
                if(strlen($t[0])>2 && substr($t[0],-2)=='[]')
                    $params[substr($t[0],0,-2)][]=$t[1];
                else
                    $params[$t[0]]=$t[1];
      }
      return array('url'=>$exp1[0],'params'=>$params);
}
// Zwraca tablice w postaci:
// Array (
// "url" => ":adres_pliku_php:",
// "params" => Array (
//    ":klucz:" => ":wartość:"
// )
// )
// Parametry przekazywane do funkcji
// $url - poprawny adres url
// UWAGA: zwraca false gdy nie potrafi przetworzyc adresu URL

Funkcja implodeURL składa do kupy adres URL przekazany jako tablica w postaci zwracanej przez funkcję explodeURL.

function implodeURL($t){
/*
@author: Raisen
@site: http://www.raisen.pl/
@e-mail: kontakt[at]raisen[dot-here]pl
*/

      if(!isset($t['url']))
            return false;
      if(empty($t['params']))
            return $t['url'];
      //echo count($t['params']);
      reset($t['params']);
      while(list($k,$v)=each($t['params']))
        if(is_array($v)){
            $temp=array();
            while(list(,$v2)=each($v))
            //foreach($v as $key=>$val)
                $temp[]=$k.'[]='.$v2;
            $p[]=implode('&',$temp);
        }
        else {
            $p[]=$k.'='.$v;
        }
      return $t['url'].'?'.implode('&',$p);
}
// sklada URL z tableli w postaci zwracanej przez funkcje explode URL
// UWAGA: zwraca false gdy nie potrafi przetworzyc tablicy

Funkcja addUrlGet dodaje parametr „query string” do adresu URL.

function addUrlGet($url,$get_name,$get_value=''){
/*
@author: Raisen
@site: http://www.raisen.pl/
@e-mail: kontakt[at]raisen[dot-here]pl
@requires: explodeURL(), implodeURL()
*/

      $t=explodeURL($url);
      $t['params'][$get_name]=$get_value;
      return implodeURL($t);
}

Funkcja delUrlGet usuwa z „query string” adresu URL wybrany parametr.

function delUrlGet($url,$get_name=null) {
/*
@author: Raisen
@site: http://www.raisen.pl/
@e-mail: kontakt[at]raisen[dot-here]pl
@requires: explodeURL(), implodeURL()
*/

      $t=explodeURL($url);
      if(isset($get_name)) unset ($t['params'][$get_name]);
      else unset ($t['params']);
      return implodeURL($t);
}

Podobne artykuły:

Brak komentarzy

Dodaj własny komentarz