0

Let's say we have two variables:

$base = "http://some.base.url/script.php?query=string";
$link = "./anotherScript.php?query=anotherString";

Is there any way in PHP to combine those URL parts into:

$result = "http://some.base.url/anotherScript.php?query=anotherString";

?

SYNCRo
  • 440
  • 4
  • 20

3 Answers3

2

You can use parse_url function for parse base url also str_replace for $link.

in example;

$base = "http://some.base.url/script.php?query=string";
$link = "./anotherScript.php?query=anotherString";
$scheme = parse_url($base);
$link = str_replace('./','/',$link);
echo $scheme["scheme"]."://".$scheme["host"].$link;

It will give echo http://some.base.url/anotherScript.php?query=anotherString

merdincz
  • 428
  • 5
  • 15
0

I use this function in my own project.

public static function uri($base, $com)
  {
    // check base
    if(preg_match('/(https?|ftp|tcp|udp):\/\/([\w]+\.)?([\w]{4,})((\.\w{2,5}){1,2})/', $base)){
      $base = parse_url($base);

      if(preg_match('/^\//', $com)){
        $base['path'] = $com;
        unset($base['query']);
      }elseif (preg_match('/^\.\//', $com)) {
        $base['path'] = strrev(preg_replace('/^[\w\s-_\.]+\//',"",strrev($base['path'])));
        $base['path'] .= substr($com, 1);
        unset($base['query']);
      }else if(parse_url($com , PHP_URL_QUERY) != null){
        if(isset($base['query'])){
          $base['query'] .= '&'.substr($com, 1);
        }else{
          $base['query'] = substr($com, 1);
        }
      }

      if(!isset($base['query'])) return $base["scheme"]."://".$base["host"].$base['path'];
      else return $base["scheme"]."://".$base["host"].$base['path'].'?'.$base['query'];

    }else {
      return false;
    }
  }

Example outputs:

var_dump(Combine::uri("http://example.com/deneme.php?a=asdasd","/index.php"));
// string(35) "http://globalmedia.com.tr/index.php"

var_dump(Combine::uri("http://example.com/deneme.php?a=asdasd","/index.php?deneme=test"));
// string(47) "http://globalmedia.com.tr/index.php?deneme=test"

var_dump(Combine::uri("http://example.com/deneme.php?a=asdasd","?add=test"));
// string(54) "http://globalmedia.com.tr/deneme.php?a=asdasd&add=test"

var_dump(Combine::uri("http://example.com/deneme/asdasd","?a=asdasd"));
// string(48) "http://globalmedia.com.tr/deneme/asdasd?a=asdasd"

var_dump(Combine::uri("http://example.com/deneme/asdasd.php","./index.php"));
// string(42) "http://globalmedia.com.tr/deneme/index.php"

-2
<?php
$url = explode('/', $base);
array_pop($url);
$result = implode('/', $url).substr($link, 1);; 
?>
Mathan Kumar
  • 45
  • 1
  • 6