我在PHP中进行了一些url重写,需要在末尾找到带斜杠的URL,然后执行301重定向。我认为有一个简单的PHP函数来查找最后一个字符串,但我找不到任何东西。第一直觉让我认为我需要使用正则表达式,但我不是100%。
以下是一个例子:
http://domainx.com/characters/我想找到一个尾随斜线并将其转换为http://domainx.com/characters
那么什么功能可以帮助我检查最后一个字符是否为“/”?
答案 0 :(得分:46)
安全删除上一个/
的好方法是使用
$string = rtrim($string, '/');
当有一个或多个时, rtrim()
会删除字符串右侧的所有/
。
您还可以在网址末尾安全地添加一个/
:
$string = rtrim($string, '/').'/';
答案 1 :(得分:30)
您可以使用substr
:
substr($str, -1)
这将返回单字节字符串中的最后一个字节/字符。另请参见多字节字符串变体mb_substr
。
但是如果你只想删除任何尾部斜杠,rtrim
可能是最好的解决方案。
由于您正在使用URL,因此您可能还需要查看parse_url
来解析URL,因为尾部斜杠不需要是URL路径的一部分。
答案 2 :(得分:13)
$string[strlen($string)-1]
为您提供最后一个字符。
但是如果要删除尾部斜杠,可以执行$string = rtrim($string, '/');
。如果没有尾部斜杠,$string
将保持不变。
答案 3 :(得分:2)
您可以使用basename()
这将为characters
以及http://domainx.com/characters/
http://domainx.com/characters
你可以这样做: -
$page = $_SERVER['REQUEST_URI'];
$module = basename($page);
然后,您可以直接在条件逻辑中使用$module
,而无需执行任何重定向。
如果您想收集最后/
个修剪过的网址,那么您可以这样做: -
如果要将项目基本URL存储在配置文件中: -
BASE_URL = 'http://example.com'
然后你可以这样做: -
$page = $_SERVER['REQUEST_URI'];
$module = basename($page);
$trimmedUrl = BASE_URL.'/'.$module;
答案 4 :(得分:1)
您可以在主题末尾preg_replace()
/
$url = 'http://domainx.com/characters/';
$url = preg_replace('/(?:\/)$/', '', $url);
答案 5 :(得分:1)
如果您的php> 7.1
$string[-1]
会给你最后一个字符
http://sandbox.onlinephpfunctions.com/code/ff439889f14906749e4eb6328796c354c60f269b
答案 6 :(得分:0)
str_ends_with($string, '/');
新的str_starts_with()
和str_ends_with()
函数被添加到内核中。