Cum modifici un URL?

Am fost pus – și nu o dată! – în situația de a modifica structura unui URL. Și nu e vorba de domeniu sau TLD ci de parametri.

De exemplu, din url-ul următor:

https://iamntz.com/?s=ie9&post_type=post&posts_per_page=15

Vreau să schimb parametri în:

https://iamntz.com/?s=ie9&post_type=custom_post_type&posts_per_page=25¤t_page=5

Cum se face?

Chiar dacă în ultima vreme am băgat cod PHP mai mult decât mi-aș fi dorit (deși nu aș putea să mă plâng că nu mi-a plăcut), nu pot spune că sunt avansat. Probabil aș putea să mă încadrez pe undeva la average. Prin urmare, trebuie să improvizez:

function addURLParameters($url, $params){
	foreach($params as $key=>$param) {
		$url = addURLParameter($url, $key, $param);
	}
	return $url;
}
function addURLParameter($url, $paramName, $paramValue) {
  $url_data = parse_url($url);
  $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 = $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;
}

Funcția am luat-o de undeva dar nu mai știu de unde (cred că stackoverflow, dar nu sunt foarte sigur) și am curățat-o puțin, am formatat-o și i-am adăugat funcția addURLParameters. Care îți permite să adaugi mai mulți parametri dintr-o dată.

Cum se folosește?

Pentru a schimba un singur parametru (continuăm exemplul de mai sus):

$url = 'https://iamntz.com/?s=ie9&post_type=post&posts_per_page=15';
$url = addURLParameter($url, 'post_type', 'custom_post_type');
$url = addURLParameter($url, 'current_page', 5);

Pentru a schimba mai mulți parametri poți continua – ca mai sus – cu câte un parametru pe linie sau te poți folosi de arrays (refuz să-l traduc ca matrice sau tablou :D ):

$url = 'https://iamntz.com/?s=ie9&post_type=post&posts_per_page=15';
$url = addURLParameters($url, array(
	'post_type'				=>	'custom_post_type',
	'posts_per_page'	=>	25,
	'current_page'		=>	5
));

Aici este și varianta JavaScript, pentru cei interesați.

8 Comentarii to “Cum modifici un URL?”

  1. de fapt, array se traduce cu “sir”. ca e sir multidimensional… alta poveste

  2. pare destul de complicat codul, am scris si eu o functie asemanatoare, poate ajuta https://gist.github.com/921378

  3. Poti sa traduci array si prin vector.

  4. Staicu Ionuț-Bogdan

    Andrei, știi cum e zicala aia cu obiceiurile și cu bordeiele, da? :D Dar mulțumesc pentru cod, într-adevăr, pare mult mai clean.

    tXK, add: ok.

  5. Salut. Observ ca te pricepi la teme. Daca ai PayPal, am 7/8 euro, care ii pun la dispozitie pentru o tema, sau niste modificari. Da-mi add pe mess : therocosif@yahoo.com

  6. Staicu Ionuț-Bogdan

    Wow! 8€? Păi cu banii ăștia îmi deschid hotel!
    Sigur n-ai uitat vreo 2 cifre?

  7. sigur se gaseste vreun indian care poate ii face chiar 2 teme :))

  8. n-ai înțeles ”” omul a zis 7/8…

Show trackbacks

Ți-a plăcut articolul? Lasă un comentariu!

You can insert code snippets using BBcode:
[js].[/js] [html].[/html] [php].[/php] [css].[/css]
You can also use some HTML tags:
<blockquote>.</blockquote> <code>.</code> <a href="">.</a> <strong>.</strong> <em>.</em>

windows apple dropbox facebook twitter