Remove last character in a path string if it is a slash
I'm doing some url rewriting in PHP and need to find URLS with a slash at the end and then do a 301 redirect. I thought there'd be a simpl开发者_Python百科e PHP function to find last string, but I couldn't find anything. First instincts make m think I need to use regex, but I'm not 100%.
Here's one example:
http://domainx.com/characters/ I want to find a trailing slash and turn it into http://domainx.com/characters
So what function will help me check if the last character is a "/"?
A nice solution to remove safely the last /
is to use
$string = rtrim($string, '/');
rtrim()
removes all /
s on the right side of the string when there is one or more.
You can also safely add exactly one single /
at the end of an URL:
$string = rtrim($string, '/').'/';
You can use substr
:
substr($str, -1)
This returns the last byte/character in a single-byte string. See also the multi-byte string variant mb_substr
.
But if you just want to remove any trailing slashes, rtrim
is probably the best solution.
And since you’re working with URLs, you might also take a look at parse_url
to parse URLs as a trailing slash does not need to be part of the URL path.
$string[strlen($string)-1]
gives you the last character.
But if you want to strip trailing slashes, you can do $string = rtrim($string, '/');
. If there is no trailing slash, $string
will remain unchanged.
You can use basename()
This will return characters
for http://domainx.com/characters/
as well as http://domainx.com/characters
You can do like this:-
$page = $_SERVER['REQUEST_URI'];
$module = basename($page);
Then you can use the $module
directly in your conditional logic without doing any redirects.
If you want to collect the last /
trimmed URL then you can do this:-
If you are storing the project base url in a config file:-
BASE_URL = 'http://example.com'
then you can do this:-
$page = $_SERVER['REQUEST_URI'];
$module = basename($page);
$trimmedUrl = BASE_URL.'/'.$module;
You could preg_replace()
a /
at the end of the subject
$url = 'http://domainx.com/characters/';
$url = preg_replace('/(?:\/)$/', '', $url);
If you have php > 7.1
$string[-1]
Will give you the last character
http://sandbox.onlinephpfunctions.com/code/ff439889f14906749e4eb6328796c354c60f269b
Difference between rtrim and custom function:
<?php
$string0 = 'hi//';
$string1 = 'hello/';
$string2 = 'world';
function untrailingslashit( $string ) {
return $string[-1] === '/' ? substr( $string, 0, -1) : $string;
}
echo untrailingslashit($string0);
echo "\n";
echo untrailingslashit($string1);
echo "\n";
echo untrailingslashit($string2);
echo "\n";
echo rtrim($string0, "/");
Result:
hi/
hello
world
hi
With PHP 8
str_ends_with($string, '/');
New str_starts_with()
and str_ends_with()
functions are added into the core.
This is coming straight from WordPress:
function untrailingslashit( $string ) {
return rtrim( $string, '/\\' );
}
精彩评论