PHP remove characters after last occurrence of a character in a string
Solution 1
You should use the tool that is designed for this type of job, parse_url
url.php
<?php
$urls = array('http://example.com/foo?u=ben',
'http://example.com/foo/bar/?u=ben',
'http://example.com/foo/bar/baz?u=ben',
'https://foo.example.com/foo/bar/baz?u=ben',
);
function clean_url($url) {
$parts = parse_url($url);
return $parts['scheme'] . '://' . $parts['host'] . $parts['path'];
}
foreach ($urls as $url) {
echo clean_url($url) . "\n";
}
Example:
·> php url.php
http://example.com/foo
http://example.com/foo/bar/
http://example.com/foo/bar/baz
https://foo.example.com/foo/bar/baz
Solution 2
You must use strrpos function not strpos ;-)
substr($url, 0, strrpos( $url, '/'));
Solution 3
Actually, a simpler solution to what you want to achieve is to play with a few string manipulation functions of PHP.
First of all, you need to find the position of the last occurrence of the '/'. You can do this by using the strrpos() function (be careful, it is with 2 r);
Then, if you provide this position as a negative value, as a second parameter to the substr() function, it will start the search of the substring from the end.
The second problem is that you want as result the part of the strings that is at the LEFT of the last '/'. To achieve this, you will have to provide substr() with a negative value to the third parameter which will indicate how many characters you want to remove.
To be sure of how many parameters you need to remove, you will have to extract the string part at the RIGHT of the '/' first, and then count its length.
//so given this url:
$current_url = 'http://example.com/firstslug/84'
//count how long is the part to be removed
$slug_tbr = substr($current_url, strrpos($current_url, '/')); // '/84'
$slug_length = strlen(slug_tbr); // (3)
/*get the final result by giving a negative value
to both second and third parameters of substr() */
$back_url = substr($current_url, -strrpos($current_url, '/'), -$slug_length);
//result will be http://example.com/firstslug/
benhowdle89
Consultant software engineer and advisor to companies building software products.
Updated on April 05, 2020Comments
-
benhowdle89 about 4 years
So the test case string may be:
http://example.com/?u=ben
Or
http://example.com
I'm trying to remove everything after the last occurrence of a '/' but only if it's not part of the 'http://'. Is this possible!?
I have this so far:
$url = substr($url, 0, strpos( $url, '/'));
But does not work, strips off everything after first '/'.