关于正则表达式:在PHP中查找字符串中的最后一个字符

Find last character in a string in PHP

我正在用PHP进行一些URL重写,需要找到末尾有斜线的URL,然后执行301重定向。我以为会有一个简单的PHP函数来查找最后一个字符串,但我找不到任何东西。第一直觉让我觉得我需要使用regex,但我不是100%。

下面是一个例子:

http://domainx.com/characters/我想找到一个尾随斜杠并将其转换为http://domainx.com/characters

那么,什么函数可以帮助我检查最后一个字符是否是"/"?


安全移除最后一个/的一个很好的解决方案是使用

1
$string = rtrim($string, '/');

当有一个或多个字符串时,rtrim()删除字符串右侧的所有/

您还可以在URL末尾安全地添加一个单独的/

1
$string = rtrim($string, '/').'/';

您可以使用substr

1
substr($str, -1)

这将返回单字节字符串中的最后一个字节/字符。另请参见多字节字符串变量mb_substr

但是,如果您只想删除任何尾部斜杠,那么rtrim可能是最好的解决方案。

而且,由于您使用的是URL,您还可以查看parse_url来解析URL,因为尾部斜杠不需要是URL路径的一部分。


$string[strlen($string)-1]给了你最后一个字符。

但是如果你想去掉尾随斜杠,你可以做$string = rtrim($string, '/');。如果没有尾随斜线,$string将保持不变。


您可以使用basename()。

这将使http://domainx.com/characters/http://domainx.com/characters返回characters

你可以这样做:

1
2
$page = $_SERVER['REQUEST_URI'];
$module = basename($page);

然后,您可以直接在条件逻辑中使用$module,而不必进行任何重定向。

如果要收集最后一个/修剪的URL,则可以执行以下操作:

如果要将项目基URL存储在配置文件中:

1
BASE_URL  = 'http://example.com'

那么你可以这样做:

1
2
3
$page = $_SERVER['REQUEST_URI'];
$module = basename($page);
$trimmedUrl = BASE_URL.'/'.$module;

如果php>7.1

1
$string[-1]

会给你最后一个角色

http://sandbox.onlinephpfunctions.com/code/ff439889f14906749e4eb6328796c354c60f269b


你可以在主题结束时用preg_replace()来表示/

1
2
$url = 'http://domainx.com/characters/';
$url = preg_replace('/(?:\/)$/', '', $url);