Travis Northcutt
Travis Northcutt

Reputation: 25036

Convert absolute to relative url with preg_replace

(I searched, and found lots of questions about converting relative to absolute urls, but nothing for absolute to relative.)

I'd like to take input from a form field and end up with a relative url. Ideally, this would be able to handle any of the following inputs and end up with /page-slug.

Edit: I'd also like this to work for something where the relative url is e.g. /page/post (i.e. something with more than one slash).

Upvotes: 8

Views: 9800

Answers (4)

steveo225
steveo225

Reputation: 11892

Take a look at parse_url if you are always working with URLs. Specifically:

parse_url($url, PHP_URL_PATH)

FYI, I tested it against all your input, and it worked on all except: example.com/page-slug

Upvotes: 12

Jacob Eggers
Jacob Eggers

Reputation: 9332

Try this regexp.

#^              The start of the string
(
   ://          Match either ://
   |            Or
   [^/]         Not a /
)*              Any number of times
#

And replace it with the empty string.

$pattern = '#^(://|[^/])+#';
$replacement = '';
echo preg_replace($pattern, $replacement, $string);

Upvotes: 3

hbhakhra
hbhakhra

Reputation: 4236

I would just do this a little hacky way if you know your application. I would use a regex to search for

[a-z].([(com|org|net)])

Upvotes: 1

lonesomeday
lonesomeday

Reputation: 238015

I think you want the part of the URL after the hostname, you can use parse_url:

$path = parse_url($url, PHP_URL_PATH);

Note that this gets the whole of the URL after the hostname, so http://example.com/page/slug will give /page/slug.

Upvotes: 2

Related Questions