PHP remove characters after last occurrence of a c

2019-03-11 03:35发布

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 '/'.

标签: php substring
4条回答
Juvenile、少年°
2楼-- · 2019-03-11 04:06

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
查看更多
Luminary・发光体
3楼-- · 2019-03-11 04:07

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/
查看更多
姐就是有狂的资本
4楼-- · 2019-03-11 04:12
$cutoff = explode("char", $string); 
echo $cutoff[0]; // 2 for what you want and 3 for the index

also

echo str_replace("http://", "", $str);

查看更多
Bombasti
5楼-- · 2019-03-11 04:20

You must use strrpos function not strpos ;-)

substr($url, 0, strrpos( $url, '/'));
查看更多
登录 后发表回答